Javascript 主干js从服务器自动刷新/重新加载集合,并使用集合更新视图
新的主干,请承担我不那么漂亮的主干javascript代码 这是我的密码Javascript 主干js从服务器自动刷新/重新加载集合,并使用集合更新视图,javascript,jquery,model-view-controller,backbone.js,Javascript,Jquery,Model View Controller,Backbone.js,新的主干,请承担我不那么漂亮的主干javascript代码 这是我的密码 var Schedule = Backbone.Model.extend({ initialize: function () { console.log("initializing model"); } }); var ScheduleCollection = Backbone.Collection.extend({ model: Schedule, url: "<%
var Schedule = Backbone.Model.extend({
initialize: function () {
console.log("initializing model");
}
});
var ScheduleCollection = Backbone.Collection.extend({
model: Schedule,
url: "<%=students_swimming_classschedules_path%>",
parse: function (resp) {
return resp;
},
});
var Schedules = Backbone.View.extend({
initialize: function () {
console.log("initializing view");
collection.on('add', this.render, this);
this.render();
},
render: function () {
for (var i = 0; i < collection.length; i++) {
s += "<tr><td>" + collection.models[i].get('account') + "</td><td>" + collection.models[i].get('status') + "</td></tr>";
}
this.$el.html(s);
},
})
var schedules = new Schedules({
el: $("#students")
});
window.setInterval(function () {
collection.fetch();
}, 2000);
var Schedule=Backbone.Model.extend({
初始化:函数(){
log(“初始化模型”);
}
});
var ScheduleCollection=Backbone.Collection.extend({
型号:时间表,
url:“”,
解析:函数(resp){
返回响应;
},
});
var Schedules=Backbone.View.extend({
初始化:函数(){
log(“初始化视图”);
collection.on('add',this.render,this);
这个。render();
},
渲染:函数(){
对于(变量i=0;i
这个代码有效。我可以将所有学生加载到$('#students')容器中
但我希望每隔几秒钟自动从服务器和视图重新加载集合。任何帮助都将不胜感激。您现在还需要两件事: 第一:告诉视图在集合更改时更新。这可能是视图中初始化函数的修订版本
initialize : function(){
console.log("initializing view");
collection.on('add', this.render, this);
collection.on('reset', this.render, this);
this.render();
},
当新项目添加到集合中时,这将刷新视图。
注意:这将重新呈现整个#学生
部分。最好编写一个单独的方法,只将新项注入DOM
第二:
您需要某种方法从服务器获取新数据。一旦你收到它,你只需将它们添加到你的收藏中。您可以使用收藏的方法,如:
collection.fetch();
或者,如果您使用非主干ajax调用接收到它们,则可以手动注入:
collection.add(newData);
由于希望在显示每个加载和显示之间延迟几秒钟,所以可以使用下划线库中的方法,该方法已经是主干网的依赖项 我已经更新了我的代码。添加
collection.on('Add',this.render,this)代码>和窗口.setInterval(函数(){collection.fetch();},2000)
并删除了这些预收集。添加()。但是为什么没有加载$(“#学生”)呢?我想重新加载此集合中的所有内容,而不仅仅是向集合中添加新项目。我想我已经找到了答案。我更改了collection.on('add',this.render,this)带有“collection.on('sync',this.render,this)”的代码>`实际上fetch()
方法触发reset
事件。对不起,我在回答时忘了提。