我一周前才开始研究骨干网,如果这个问题很愚蠢,请不要介意。好吧,这就是我想要做的。
我有一个名为 Item 的模型和一个名为 Items 的集合。有两种视图,一种用于添加项目,另一种用于列出项目。我遇到的问题是当我尝试保存该项目时,它第一次被正确保存。下次我添加新项目时,项目创建成功,但之前添加的项目也会更新为新项目的属性。这发生在所有被添加的连续项目上。
我猜我集合中的所有模型都在更新,或者我需要有自己的保存方法。我实际上无法弄清楚我做错了什么。我只想用视图保存有问题的模型,而不是集合中的所有模型。真的很感激一些指示。
链接到演示。
项目添加/编辑视图
define([
'jquery',
'use!underscore',
'use!backbone',
'mustache',
'models/item',
'views/bootstrap',
'text!templates/items/edit.mustache',
'text!templates/items/new.mustache',
'handlebars',
'bootstrap'
], function($, _, Backbone, Mustache, Item, Bootstrap, editTemplate, newTemplate, Handlebars){
var app = new Backbone.Router
var ItemEditView = Backbone.View.extend({
el: $('#page'),
events: {
'submit #new-item': 'saveItem',
'click .cancel': 'cancelItem'
},
initialize: function(options){
if (!this.model.isNew()) {
this.model.bind('change', this.render, this)
this.model.fetch()
}
},
render: function(){
var item = this.model.attributes
var template = this.model.isNew() ? newTemplate : editTemplate
var compiledTemplate = Mustache.render(template, item )
$(this.el).html(compiledTemplate)
if (this.model.isNew()) $('#itemName').focus()
return this
},
/*
* Event actions
*/
saveItem: function(e) {
e.preventDefault()
var item = {
name: $('#itemName').val(),
price: $('#itemPrice').val()
}
var self = this
this.model.save(item, {
success: function (model, response) {
app.navigate('items/'+model.id, {trigger: true, replace: true})
},
error: function (model, response) {
new Bootstrap.alert({ el: $('#page') }).render(response, 'error')
}
})
},
cancelItem: function (e) {
if (this.model.isNew())
app.navigate('items', {trigger: true, replace: true})
else
app.navigate('items/'+this.model.id, {trigger: true, replace: true})
}
})
return ItemEditView
})
物品型号
define([
'use!underscore',
'use!backbone'
], function(_, Backbone) {
var Item = Backbone.Model.extend({
urlRoot: 'api/items',
idAttribute: '_id'
});
return Item;
});
项目集合
define([
'jquery',
'use!underscore',
'use!backbone',
'models/item'
], function($, _, Backbone, Item){
var Items = Backbone.Collection.extend({
model: Item,
url: 'api/items/'
});
return Items;
});
链接到源代码(以防万一)