blu*_*l2k 6 javascript backbone.js
我正在设置一个由Backbone驱动的应用程序.我面临一个"应该是简单的"问题,我有一个名为"Message"的模型,一个名为"MessageList"的Collection,以及名为"MessageView"和"MessageListView"的Views.
MessageListView代码呈现MessageList.我有4个切换按钮,用于过滤MessageListView显示的内容.过滤器按钮为"全部","活动","标记"和"忽略"."全部"是页面加载的初始过滤器.当用户按下"已标记"过滤器时,只会出现带有标志== 1的消息.再次按"全部"时,所有消息应再次出现.
我遇到的问题,以及我的设计中的问题是,当我根据filterString过滤Collection时,对原始整个Collection的引用会丢失.因此,当再次按下"全部"时,消息已丢失.
我很好奇在Backbone中做到这一点的最好方法...
这是设置代码......
var messageListView = new MessageListView({collection: messageList});
Run Code Online (Sandbox Code Playgroud)
这是MessageListView代码......
MessageListView = Backbone.View.extend({
initialize : function() {
this.collection.on("add", function(model) {
var view = new MessageView({model: model});
$("div.cameras").prepend(view.render().el);
});
this.collection.on("remove", function(model) {
var ID = model.id;
$("#message-" + ID).parent("div.message").remove();
});
this.collection.on("reset", function(models) {
$("div.cameras").empty();
models.each(function(message) {
var view = new MessageView({model: message});
$("div.cameras").prepend(view.render().el);
});
});
},
filterMessages : function(filterString) {
var filtered = this.collection.filter(function(model){
if (filterString == "all")
{
return true;
}
else if (filterString == "active")
{
return model.get("ignore") == "0";
}
else if (filterString == "ignore")
{
return model.get("ignore") == "1";
}
else if (filterString == "flag")
{
return model.get("flag") == true;
}
});
this.collection.reset(filtered);
},
Run Code Online (Sandbox Code Playgroud)
Edw*_*ith 10
你打电话的时候
this.collection.reset(filtered)
Run Code Online (Sandbox Code Playgroud)
您丢弃旧数据并将其替换为新数据.
您要做的是使用临时"集合"(数组或Backbone.Collection)来保存过滤器的结果,这就是您用作将数据呈现给DOM的"数据源".
有几种方法可以做到这一点.
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |