Javascript Backbone.js保存具有其他模型数组属性的模型
我正在编写第一个开源主干网.js应用程序。 存储库在这里 我在为发票保存行项目数组时遇到问题。好的,只在编辑后保存,因为它将当前编辑的发票中的行项目保存到localstorage中的所有发票。不知道为什么会发生这种情况,他们总是有相同的CID。 创建发票时的默认行项目始终为cid0。有什么帮助吗Javascript Backbone.js保存具有其他模型数组属性的模型,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,我正在编写第一个开源主干网.js应用程序。 存储库在这里 我在为发票保存行项目数组时遇到问题。好的,只在编辑后保存,因为它将当前编辑的发票中的行项目保存到localstorage中的所有发票。不知道为什么会发生这种情况,他们总是有相同的CID。 创建发票时的默认行项目始终为cid0。有什么帮助吗 class window.Invoice extends Backbone.Model initialize: -> defaults: date: new Date
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 = "#"
在编辑表单并更改行项目的值之后,它们不会在集合中更改。将新项目添加到发票行项目集合工作。有什么帮助吗?:)我很难理解每件事是如何运作的:)
您可以在此处进行检查:默认值是文字值,在定义时进行计算。这意味着您正在为每个发票实例向数组分配相同的LineItem实例 解决方法很简单:使用函数返回数组。这样,每次创建发票时都会得到一个新的行项目数组:
window.Invoice = Backbone.Model.extend({
defaults: {
date: function(){ return new Date(); },
line_items: function(){ return [new LineItem()]; },
other: "stuff"
}
});
默认值是在定义时计算的文字值。这意味着您正在为每个发票实例向数组分配相同的LineItem实例 解决方法很简单:使用函数返回数组。这样,每次创建发票时都会得到一个新的行项目数组:
window.Invoice = Backbone.Model.extend({
defaults: {
date: function(){ return new Date(); },
line_items: function(){ return [new LineItem()]; },
other: "stuff"
}
});
回答得好。或者,在<代码> >初始化/<代码>方法中,将<代码> @ LynItIsIs= [新的LITENTION] <代码>。我也将考虑您的“代码> > LITENTION< /Cult> S的数组是一个<代码>主干。它将消除你的许多创建代码(你可以用“添加”来代替),并将清理你的一些其他代码。结果证明,保存作为模型的嵌套属性时出现了一个小问题。我最终将集合用于行项目,并将所有内容解析为JSON,然后再发送到localStorageGood answer。或者,在<代码> >初始化/<代码>方法中,将<代码> @ LynItIsIs= [新的LITENTION] <代码>。我也将考虑您的“代码> > LITENTION< /Cult> S的数组是一个<代码>主干。它将消除你的许多创建代码(你可以用“添加”来代替),并将清理你的一些其他代码。结果证明,保存作为模型的嵌套属性时出现了一个小问题。我最终将集合用于行项目,并在发送到localStorage之前将所有内容解析为JSON