まだBackboneに頭を悩ませており、ファイルからJSONを渡すときにコレクションが読み込まれないという問題が発生しています。fetch()呼び出しはエラーになりますが、console.log()が有用なことを何も教えてくれないため、正確にデバッグする方法がわかりません(私がそれらを掘り下げる方法を知っている限り)。
コードは次のとおりです。
ItemGroup = Backbone.Collection.extend({
model: Item, // left out definition since it's very simple
url: 'js/items.json',
initialize: function(models, options) {
this._meta = {};
},
parse: function(response) { // parse is not being called, not sure why?
this.set(response.name, 'name');
return response.items;
},
set: function(val, prop) {
this._meta[prop] = val;
},
get: function(prop) {
return this._meta[prop];
}
});
ItemGroupView = Backbone.View.extend({
el: '#item-container',
initialize: function(options) {
this.collection.bind('reset', this.render, this);
this.collection.fetch({
success : function() {
alert('successful');
},
error : function(collection, xhr, options) { // This is being triggered, not sure why?
console.log(collection);
console.log(xhr);
console.log(options);
}
});
},
processItem: function(item) {
var itemView = new ItemView({ model: item });
this.$el.append(itemView.render().el);
},
render: function() {
console.log(this.collection); // this shows an empty collection
var itemGroupHtml = this.template({ name: this.collection.get('name') });
$(this.main).html(itemGroupHtml);
_.each(this.collection.models, this.processItem, this);
return this;
}
});
var toiletryItems = new ItemGroup();
var toiletryGroupView = new ItemGroupView({ collection: toiletryItems });
そして、これが私のjsonです(Chomeインスペクターを使用したネットワークリクエストではファイルが200と表示されているため、ファイルが正常に検出されていることがわかります):
[
{
'name' : 'toiletries',
'items' : [
{ 'name': 'toothbrush' },
{ 'name': 'deodorant' },
{ 'name': 'toothpaste' },
]
}
]
前もって感謝します!
アップデート:
無効なjsonを修正しましたが、まだ空のtoilterryItemsコレクションが表示されています。何か案は?