JSON(phpのjson_encodeから)をBackboneJSコレクションにロードしようとしています。私は問題を次のように単純化しました:
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:「in」演算子を使用して「id」を検索することはできません
同様の問題: バックボーン:サーバーからコレクションをフェッチ
私のJSONは確かに正しい形式であるように見えますが、明らかな何かが欠けていますか? 「id」ではなく単にid:「1」を使用しようとしましたが、同じ結果になりました。
JSONはまだ文字列形式です。割り当てる前にJSON.parseに渡します。
var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');
モデルのdefaults
ハッシュを忘れました。
MyObject = Backbone.Model.extend({
defaults: {
id: null,
name: null,
description: null
}
});
ドキュメント を参照してください
だから私はおそらく完全に要点を見逃しているかもしれませんが、問題は配列の周りの「一重引用符」にあるようです。つまり、これ:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
する必要があります:
var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}];
Php、afikは一重引用符を追加しないので、次のような行を変更するのと同じくらい簡単なはずです。
$my_js = "var myJSON = '" . json_encode($my_array_to_send)) . "';";
に:
$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; ";