Javascript 主干js从服务器自动刷新/重新加载集合,并使用集合更新视图

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: "<%

新的主干,请承担我不那么漂亮的主干javascript代码

这是我的密码

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)`实际上
fetch()
方法触发
reset
事件。对不起,我在回答时忘了提。