我正尝试使用一个集合和一个每5秒获取一次来生成多个视图。Backbone.js多个视图,一个集合,一个提取
下面是一个工作示例,但两个视图都在刷新时刷新。 我可以将响应拼接到多个网址,但我想最大限度地减少请求的数量。
我目前的问题是,我不希望所有的视图重新渲染时,每集合5秒,只有相关的视图改变。 我曾尝试在集合中创建多个模型,并在解析函数中添加正确的对象,但没有任何运气。
响应:
{
"json-1": {
"sub_1": "3",
"sub_2": [],
},
"json-2": {
"sub_1": [],
"sub_2": "1",
},
}
//客户
const APICollection = Backbone.Collection.extend({
initialize: (models, options) => {
this.id = options.id;
},
url:() => {
return 'https://url.url/' + this.id;
},
model: APIModel,
parse: (resp) => {
return resp;
},
});
const ViewOne = Backbone.View.extend({
initialize: function() {
this.collection.bind('sync', this.render, this);
this.update();
_.bindAll(this, 'update');
},
render: function (n, collection) {
// Render view
},
update: function() {
let self = this;
this.collection.fetch({
update: true, remove: false, success: function() {
setTimeout(self.update, 5000);
}
});
}
});
// Also updates when re-fetched
const ViewTwo = Backbone.View.extend({
initialize: function() {
this.collection.bind('sync', this.render, this);
},
render: function (n, collection) {
// Render function
}
});
let col = APICollection([], {id: 'someid'});
new ViewOne({collection: col, el: $("#one")});
new ViewTwo({collection: col, el: $("#two")});
**更新
澄清: “只有相关联的观点,即改变”。通过这个我的意思是'ViewOne'只应该在'json-1'改变时重新呈现,'ViewTwo'不应该重新呈现。目前完整的回复将发送到两个视图。
“...只有关联的视图发生了变化”。 - 您必须澄清这一点,集合中的某些模型是否与某些视图有关?是什么使得一个视图在与集合的工作方式上有所不同? – mikeapr4
我会更新问题 – coop
如果你的回答没有返回数组,你应该使用'Backbone.Model'而不是'Backbone.Collection',然后你可以在每个视图中监听'change:attr'事件。 – mikeapr4