Tôi đang cố gắng tập hợp bộ xương sống của mình từ API cục bộ và thay đổi chế độ xem để hiển thị dữ liệu. Lệnh fetch() trong bộ sưu tập của tôi dường như thành công và lấy dữ liệu, nhưng thao tác tìm nạp không cập nhật các mô hình trong bộ sưu tập.Bộ sưu tập xương sống tìm nạp dữ liệu nhưng không đặt mô hình
Đây là những gì tôi đã có cho mô hình và bộ sưu tập của tôi:
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");
}
});
và tôi đã thực hiện quan điểm của tôi như thế này:
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();
và API của tôi trả về dữ liệu JSON như thế này:
[
{
"id": "1",
"title": "Ice Station Zebra",
"author": "Alistair MacLaine"
},
{
"id": "2",
"title": "The Spy Who Came In From The Cold",
"author": "John le Carré"
}
]
Khi tôi chạy mã này tôi có được điều này trong bảng điều khiển
BookListView.render() app.js:67
Collection fetch success Array[5]
Collection models: undefined
cho tôi biết rằng cuộc gọi tìm nạp đang nhận dữ liệu OK, nhưng nó không phổ biến các mô hình với dữ liệu đó. Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai ở đây?
Cảm ơn rất nhiều người dùng10, đó là câu trả lời! Tôi vẫn đang tìm cách của mình và không nhận ra rằng "this" có phạm vi toàn cục bên trong fetchSuccess - tôi vẫn chưa chắc chắn 100% tại sao, nhưng tôi tìm thấy khi tôi liên kết "this" với fetchSuccess khi khởi tạo bộ sưu tập mà nó có phạm vi của bộ sưu tập. –
'fetchSuccess' là một cuộc gọi lại được gọi là' Backbone.sync' được thực thi trong phạm vi toàn cục bởi Backbone.js. – user10
Ohhhh vì vậy đó là lý do tại sao! Cảm ơn user10. –