Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js保存具有其他模型数组属性的模型_Javascript_Backbone.js_Coffeescript - Fatal编程技术网

Javascript Backbone.js保存具有其他模型数组属性的模型

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

我正在编写第一个开源主干网.js应用程序。 存储库在这里

我在为发票保存行项目数组时遇到问题。好的,只在编辑后保存,因为它将当前编辑的发票中的行项目保存到localstorage中的所有发票。不知道为什么会发生这种情况,他们总是有相同的CID。 创建发票时的默认行项目始终为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 = "#"
在编辑表单并更改行项目的值之后,它们不会在集合中更改。将新项目添加到发票行项目集合工作。有什么帮助吗?:)我很难理解每件事是如何运作的:)


您可以在此处进行检查:

默认值是文字值,在定义时进行计算。这意味着您正在为每个发票实例向数组分配相同的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