我在保存Invoice的LineItems数组时遇到问题。好吧,只有在编辑后保存,因为它将当前编辑的发票中的行项目保存到localstorage中的所有发票。 Dunno为什么会这样,他们总是有相同的Cids。 创建发票时的默认订单项始终为cid0。有什么帮助吗?
class window.Invoice extends Backbone.Model
initialize: ->
defaults:
date: new Date
number: '000001'
seller_info: null
buyer_info: null
line_items: [new LineItem]
我不明白的最后一件事是为什么骨干不能保存嵌套属性。正如您将在回购中看到的那样:
handleSubmit: (e) ->
data = {
date : @$("input[name='date']").val(),
number : @$("input[name='number']").val(),
buyer_info : @$("textarea[name='buyer_info']").val(),
seller_info : @$("textarea[name='seller_info']").val(),
line_items: @model.line_items.toJSON()
}
if @model.isNew()
invoices.create(data)
else
@model.save(data)
e.preventDefault()
e.stopPropagation()
$(@el).fadeOut 'fast', ->
window.location.hash = "#"
事情是在编辑表单和更改订单项的值之后,它们不会在集合中更改。添加新的发票订单项集合工作。有帮助吗? :)我很难理解每个人的工作方式:)
答案 0 :(得分:8)
默认值是文字值,在定义时进行评估。这意味着您要为每个Invoice实例为数组分配相同的LineItem实例。
对此的修复很简单:使用函数返回数组。这样,每次创建发票时都会获得一个新的订单项数组:
window.Invoice = Backbone.Model.extend({
defaults: {
date: function(){ return new Date(); },
line_items: function(){ return [new LineItem()]; },
other: "stuff"
}
});