Backbone.js保存模型的属性是其他模型的数组
Backbone.js saving model with attribute that is array of other models
我正在写第一个开源的Backbone.js应用。存储库在这里https://github.com/defrag/Backbone-Invoices
我有保存LineItems的发票数组的问题。只在编辑后保存,因为它将行项从当前编辑的发票保存到本地存储中的所有发票。不知道为什么会这样,他们总是有相同的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]
我不明白的最后一件事是为什么主干不保存嵌套的属性。正如你将在repo中看到的那样:
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 = "#"
事情是在编辑表单和更改行项的值之后,它们在集合中不会改变。添加新的发票行项目收集工作。任何帮助吗?:)我很难理解每件事是如何工作的:)
你可以在这里查看:http://backbone-invoices.brillante.pl/
默认值是文字值,在定义时求值。这意味着对于Invoice的每个实例,您都将LineItem的相同实例分配给数组。
解决这个问题很简单:使用函数返回数组。这样,每次创建发票时都会得到一个新的行项目数组:
window.Invoice = Backbone.Model.extend({
defaults: {
date: function(){ return new Date(); },
line_items: function(){ return [new LineItem()]; },
other: "stuff"
}
});
相关文章:
- 如何从其他控制器更改角度模型值
- 挖空、视图模型位于其他对象和数据绑定中
- ng显示基于其他一些html元素的模型值
- backbone.js在其他模型中渲染/创建多个模型
- Aurelia组件在其他视图模型中使用时不共享实例
- Ember.js:一个模型如何观察其他模型
- 当可观察数组是其他模型的属性时,挖空不会更新 UI
- 角度ng模型依赖于形式上的其他ng模型
- 如何将外部 API 中的其他数据添加到集合中的现有模型
- 主干.js:如何在集合/其他模型中实例化模型
- 可由其他视图模型访问的挖空可观察/视图模型
- 点击模型并添加到主干中的其他集合中
- 为什么Ember模型的命名与其他模型不同
- 使用干净的url将模型传递给chaplinjs中的其他控制器
- 如何在角度js中使用模型的值作为其他模型的名称
- 当指令的其他实例中的模型发生更改时,检查函数
- Ember.js渲染模板在其他模板中没有获取模型
- 将数据模型设置为其他数据模型的属性
- 如何在backbone.js中将视图/模型的引用传递给其他视图/模型/路由?
- v模型上的输入,动态地改变其他脚本的值