Javascript 主干集合视图添加未使用模型调用
我有我的模特Javascript 主干集合视图添加未使用模型调用,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,我有我的模特 var Client = Backbone.Model.extend({}); var Colony = Backbone.Collection.extend({ url: '/presence/knock', model: Client }); 观点 我在/presence/knock上用comet更新了集合 var colony = new Colony([{ ip: '127.0.0.1', name: 'localhost.localdom
var Client = Backbone.Model.extend({});
var Colony = Backbone.Collection.extend({
url: '/presence/knock',
model: Client
});
观点
我在/presence/knock
上用comet更新了集合
var colony = new Colony([{
ip: '127.0.0.1',
name: 'localhost.localdomain',
lsup: 'now'
}]);
setInterval(function(){
colony.fetch({
update: true
});
}, 5*1000);
var colonyView = new ColonyView({
collection: colony
});
$("#clients-board").append(colonyView.render().el);
第一次呈现colonyview时,addOne
获取一个客户机作为参数,因为它是通过addAll调用的。但下一次通过add
调用add
时,我在inspector项目中看到的事件
不是客户机
r{cid:“c606”,属性:对象,集合:r,_changing:false,_previousAttributes:Object…}
我想我解决了你的问题 下面是一个对您的代码进行操作的工具: 我使用mockjax来模拟服务器,下面是它返回的内容:
[{
ip: '127.0.0.1',
name: 'localhost.localdomain',
lsup: 'now'
},
{
ip: '127.0.0.2',
name: 'localhost.localdomain',
lsup: 'now'
}]
因为您说您正在获取对象{clients:Array[1]},所以您的服务器可能会返回:
[{
clients:[{
ip: '127.0.0.1',
name: 'localhost.localdomain',
lsup: 'now'
}]
}]
下面是展示您案例的fiddle:
您应该将服务器代码更改为仅发送客户端数组,而不是包含属性客户端和关联数组的对象。r{cid:“c606”,attributes:object,collection:r,_changing:false,_previousAttributes:object…}是从backbone.model扩展而来的模型对象。它可以是客户机模型的一个实例。也许您可以登录item.toJSON()来查看属性我认为您必须编写colony.fetch({update:true,remove:false})。如果没有删除,则不会为每个新模型触发“添加”事件@nilgundag我在addOne中选中了item.toJSON(),它是
对象{clients:Array[1]}
,这是一个殖民地(集合),谢谢。这也是我早上看到的。我重写了parse
方法并返回了clients
,现在问题是collection.fetch{update:true}
没有正确合并。我正在使用ip
字段,因为idAttribute
是我的Client
模型,但它仍然add
s everything,而不是mergingvar Client=Backbone.Model.extend({idAttribute:“ip”});在小提琴中工作:是的,我看到它在工作。拉小提琴。我必须检查为什么它在实际场景中不起作用。ThanksIt实际上添加了所有内容,但它不符合id属性。我在上面贴了一个不同的问题,如果你能帮忙,那就太好了
[{
clients:[{
ip: '127.0.0.1',
name: 'localhost.localdomain',
lsup: 'now'
}]
}]