我对Backbone和Underscore相对较新,并且其中一个问题不是真正的问题 - 只是出于好奇而烦恼。
我构建了一个非常简单的应用程序,允许您在集合中添加和删除模型,并在浏览器中呈现它们。它还具有console.log
集合的能力(所以我可以看到我的集合)。
这是奇怪的事情:生成的ID是1,3,5...
,依此类推。我的代码是否有特定原因,或与BB / US有关?
这是一个有效的小提琴:http://jsfiddle.net/ptagp/
代码:
App = (function(){
var AppModel = Backbone.Model.extend({
defaults: {
id: null,
item: null
}
});
var AppCollection = Backbone.Collection.extend({
model: AppModel
});
var AppView = Backbone.View.extend({
el: $('#app'),
newfield: $('#new-item'),
initialize: function(){
this.el = $(this.el);
},
events: {
'click #add-new': 'addItem',
'click .remove-item': 'removeItem',
'click #print-collection': 'printCollection'
},
template: $('#item-template').html(),
render: function(model){
var templ = _.template(this.template);
this.el.append(templ({
id: model.get('id'),
item: model.get('item')
}));
},
addItem: function(){
var NewModel = new AppModel({
id: _.uniqueId(),
item: this.newfield.val()
});
this.collection.add(NewModel);
this.render(NewModel);
},
removeItem: function(e){
var id = this.$(e.currentTarget).parent('div').data('id');
var model = this.collection.get(id);
this.collection.remove(model);
$(e.target).parent('div').remove();
},
printCollection: function(){
this.collection.each(function(model){
console.log(model.get('id')+': '+model.get('item'));
});
}
});
return {
start: function(){
new AppView({
collection: new AppCollection()
});
}
};
});
$(function(){ new App().start(); });
答案 0 :(得分:8)
如果您查看backbone.js源代码,您会注意到_.uniqueId用于设置模型cid
:
https://github.com/documentcloud/backbone/blob/master/backbone.js#L194
这意味着每次创建模型实例时,都会调用_.uniqueId()
。
这是导致它增加两次的原因。