2012-01-16 14 views
16

JSON(PHPのjson_encodeから)をBackbone JSコレクションに読み込もうとしています。私はに、問題を単純化してきました:バックボーン:JSONからコレクションを作成

var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]'; 

var myCollection = new MyCollection(myJSON, { view: this }); 

そして:

MyObject = Backbone.Model.extend({ 

    id: null, 
    name: null, 
    description: null 
}); 

MyCollection = Backbone.Collection.extend({ 
model: MyObject, 
initialize: function (models,options) { } 
}); 

エラー:

Uncaught TypeError: Cannot use 'in' operator to search for 'id' in

同様の問題:Backbone: fetch collection from server

私のJSONは確かに右にあるように見えますフォーマット、私は何かが明らかに欠けている?私は単純にid: "1"と同じ結果を持つ "id"を使用しようとしました。

答えて

13

あなたのJSON文字列形式のままである参照してください。それを割り当てる前に、JSON.parseにそれを渡します

var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]'); 
+1

ええ、jqueryの$ .getJSONメソッドのようなものを使ってデータを取得すると、自動的にJSON.parseが呼び出されます。 –

+1

ドキュメントでは、jsonを少なくとも1つの例の初期化に直接渡しています:http://documentcloud.github.com/backbone/#Collection-toJSON(このデモの目的はjsonをエクスポートする方法です) – pws5068

+1

コレクションコンストラクタに渡す配列がすでに解析されているとは言いません。 JSONは通常、サーバーとクライアントの間で文字列形式で渡されるため、送信前に解析したり、送信前に文字列を解析する必要があります。 – kinakuta

3

モデルでdefaultsハッシュを忘れました。

MyObject = Backbone.Model.extend({ 
    defaults: { 
    id: null, 
    name: null, 
    description: null 
    } 
}); 

documentation

+0

ああ、私はそう版に焦点を当てました。 JSON構造の場合、私はこの単純な除外を見逃しました。ありがとうございます – pws5068

+3

defaultsハッシュはオプションです – kinakuta

+0

@kinakuta yep、デフォルトハッシュはオプションですが、この例のモデルはハッシュなしでデフォルト機能を使用しようとしていました。 – Paul

0

ので、私は多分完全にポイントを逃したが問題アレイの周りに「一重引用符」のようです。

var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]'; 

は次のようになります:それは、これは、ある

var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}]; 

PHP、アフィク、単一引用符を追加していないので、それが書かれた行変更するだけなのでシンプルでなければなりません:

$my_js = "var myJSON = '" . json_encode($my_array_to_send)) . "';"; 

へ:

$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; "; 
関連する問題