wwl*_*wli 7 javascript model-view-controller jquery backbone.js
Backbone的新手,请承担我不那么漂亮的主干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);
Run Code Online (Sandbox Code Playgroud)
这段代码有效.我可以将所有学生加载到$('#students')容器中.
但我想每隔几秒钟从服务器和视图自动重新加载集合.任何帮助,将不胜感激.
Hun*_*der 12
你现在还需要两件事:
第一:告诉您的视图在收集更改时更新.这可能是您视图中初始化函数的修订版本.
initialize : function(){
console.log("initializing view");
collection.on('add', this.render, this);
collection.on('reset', this.render, this);
this.render();
},
Run Code Online (Sandbox Code Playgroud)
当新项目添加到您的收藏集时,这将刷新您的视图.注意:这将重新渲染整个#students部分.如果你编写一个单独的方法,只是将新项目注入DOM,那就更好了.
第二:你需要一些方法从服务器获取新数据.只要您收到它,就可以将它们添加到您的收藏中.您可以使用集合的fetch()方法,如:
collection.fetch();
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用非骨干ajax调用收到它们,您可以手动注入:
collection.add(newData);
Run Code Online (Sandbox Code Playgroud)
由于您希望在显示每个加载和显示之间延迟几秒钟,您可以使用下划线库中的去抖方法,该方法已经是主干的依赖项.