【问题标题】:Backbone model - collection property not empty on new model creation骨干模型 - 创建新模型时集合属性不为空
【发布时间】:2013-11-19 01:15:39
【问题描述】:

我有一个带有骨干集合作为属性的模型。当我创建一个新模型并将其与其集合一起保存到数据库时,一切正常。

但是,当我创建一个新模型时,它的集合包含以前的模型值。正如预期的那样,所有其他属性都是空白的。

我已经像这样定义了我的模型默认值:

defaults: {
        InsertionOrderNumber: null,
        ClientID: null,
        CampaignName: null,
        FromDate: null,
        ToDate: null,
        TotalBudget: null,
        ManagementFee: null,
        AgencyCommission: null,
        SourceDocuments: new Uploads() //this is the collection
    }

由于某种原因,该集合的所有新模型似乎都在使用同一个集合实例。

知道为什么会这样吗?

提前致谢 =)

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    照原样,new Uploads() 在您定义模型时评估,而不是在您创建新实例时评估。使用函数在默认值中创建新集合:

    var M = Backbone.Model.extend({
        defaults: function() {
            return {
                InsertionOrderNumber: null,
                ClientID: null,
                CampaignName: null,
                FromDate: null,
                ToDate: null,
                TotalBudget: null,
                ManagementFee: null,
                AgencyCommission: null,
                SourceDocuments: new Uploads()
            };
        }
    });
    

    还有一个演示http://jsfiddle.net/nikoshr/gzTgt/

    【讨论】:

    • 太棒了,感谢您的快速回复。问题解决了。我怀疑是这样的。
    • 感谢您发现问题,我正遭受与我尝试学习 Backbone 完全相同的事情。但是,一旦我明白自己做错了什么,我觉得更好的解决方案是在初始化函数中使用this.set('SourceDocuments', new Uploads())。这有什么问题吗?
    • @davidreedernst 本身没有错,但是 1. 您必须检查是否没有将该属性作为选项传递给构造函数,以及 2. 设置侦听器时要小心在set 之前的初始化函数中,您将触发它们。旁注:我更喜欢将子集合设置为model.SourceDocuments,而不是将它们包含在属性中
    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多