我試圖從本地API填充我的Backbone集合並更改視圖以顯示數據。我的集合中的fetch()調用似乎成功了,並抓取數據,但獲取操作不會更新集合中的模型。骨幹集合獲取數據,但不設置模型
這是我已經得到了我的模型和收集:
var Book = Backbone.Model.extend();
var BookList = Backbone.Collection.extend({
model: Book,
url: 'http://local5/api/books',
initialize: function(){
this.fetch({
success: this.fetchSuccess,
error: this.fetchError
});
},
fetchSuccess: function (collection, response) {
console.log('Collection fetch success', response);
console.log('Collection models: ', this.models);
},
fetchError: function (collection, response) {
throw new Error("Books fetch error");
}
});
,我已經做了我的看法是這樣的:
var BookView = Backbone.View.extend({
tagname: 'li',
initialize: function(){
_.bindAll(this, 'render');
this.model.bind('change', this.render);
},
render: function(){
this.$el.html(this.model.get('author') + ': ' + this.model.get('title'));
return this;
}
});
var BookListView = Backbone.View.extend({
el: $('body'),
initialize: function(){
_.bindAll(this, 'render');
this.collection = new BookList();
this.collection.bind('reset', this.render)
this.collection.fetch();
this.render();
},
render: function(){
console.log('BookListView.render()');
var self = this;
this.$el.append('<ul></ul>');
_(this.collection.models).each(function(item){
console.log('model: ', item)
self.appendItem(item);
}, this);
}
});
var listView = new BookListView();
和我的API返回的JSON數據是這樣的:
[
{
"id": "1",
"title": "Ice Station Zebra",
"author": "Alistair MacLaine"
},
{
"id": "2",
"title": "The Spy Who Came In From The Cold",
"author": "John le Carré"
}
]
當我運行這段代碼我得到這個在控制檯:
BookListView.render() app.js:67
Collection fetch success Array[5]
Collection models: undefined
它向我表明提取調用正在獲取數據,但它沒有用它填充模型。任何人都可以告訴我我在這裏做錯了什麼?
非常感謝user10,那就是答案!我仍然在找到自己的方式,並沒有意識到「this」在fetchSuccess中具有全局作用域 - 我仍然不是100%確定爲什麼,但是當我將「this」綁定到fetchSuccess初始化它擁有的集合時集合的範圍。 –
'fetchSuccess'是Backbone.sync調用的回調函數,由Backbone.js在全局範圍內執行。 – user10
Ohhhh所以這就是爲什麼!感謝user10。 –