0

我创建的模型(RuleModel)和具有属性,是其它模型(RuleInformationModel)。但是在传递json(SampleRule)数据时,内部模型没有被填充。嵌套模型在主链中填充数据

当我做安慰IAM越来越不确定。所以我检查了Cosole中的RuleInformationModel,其中只有样本json的默认值不会被添加到此内部模型中。

var SampleRule = { 
    RuleId: 1, 
    Information: [{ 
     RuleId:1, 
     RuleName: 'Diwali Offer', 
     MerhantId: '565cfa73-8f12-4876-b2cf-2e61a28eddca', 
     StartDate: '1/1/0001 12:00:00 AM', 
     EndDate: '1/1/0001 12:00:00 AM', 
     IsActive: 'True', 
     Description: 'Diwali Offer for Samsung products', 
     RuleSetId: 1 , 
     Status:'False' 
}], 
    Conditions: {}, 
    Actions: {} 
}; 

var RuleInformationModel = Backbone.Model.extend({ 

    defaults: { 
     RuleId: '', 
     RuleName: '', 
     MerchantId: '', 
     StartDate: '', 
     EndDate: '', 
     IsActive: '', 
     Description: '', 
     RuleSetId: '', 
     Status: 'False' 
    }, 
    idAttribute: "RuleId" 
}); 

var RuleModel = Backbone.Model.extend({ 

    initialize: function (options) { 
     this.RuleId = options.RuleId; 
    }, 
    defaults: { 
     RuleId: '', 
     Information: new RuleInformationModel(), 
     Conditions: {}, 
     Actions: {} 
    }, 
    idAttribute: "RuleId", 
    urlRoot: function() { 
     return "../BackBoneApi/RuleEngine/" + this.RuleId 
    }, 
    parse: function (response) { 
     response = SampleRule; 
     return response; 
    } 
}); 

var NewOrEditRuleView = Backbone.View.extend({ 

    tagName: 'div', 
    template: ItemTemplate, 
    initialize: function (options) { 
     var self = this; 
     self.model = new RuleModel({RuleId:options.RuleId}); 
     this.model.fetch(); 
     console.log(self.model.get('Information').get('RuleName')); 
    }, 
    render: function (Purpose) { 
     var self = this; 
     var tmpl = _.template(self.template); 
     console.log(self.model); 
     self.$el.html(tmpl({ Purpose: Purpose, RuleName: self.model.get('Information').get('RuleName') })); 
    } 
}); 

回答

0

不,它不会。您没有在您实例化或解析SampleRule对象的位置发布代码,但我想我明白您的意思。我建议你在你的RuleModel中创建一个方法,它沿用了以下几行:

var RuleModel = Backbone.Model.extend({ 
    // As you were.. 
    // ... 
    updateInformationModel: function(object) { 
     // SampleRule.Information is an array, I assume this is by design? If so: 
     this.get("Information").set(object.Information[0]); 
    } 
    // ... 
});