我正在做一个骨干/信号处理器。我有非常简单的模型工作,我可以创建它们的客户端,并通过signalr检索它们。问题是:
如果使用嵌套模型创建模型的客户端版本,则可以访问以下属性:
model.attributes.nestedModel.attributes.attributeName当我从signalr检索模型时
model.fetch()模型回来了,但是现在要访问我需要使用的嵌套模型属性
model.attributes.nestedModel.attributeName嵌套模型上的属性级别被删除,因此导致模板呈现失败。
我怎么才能避开这一切?我做错了什么吗?我是新来的先生/骨干。
顺便说一句,我正在使用backbone.signalr nuget软件包。
谢谢。
发布于 2013-11-22 16:02:49
这是因为当您使用fetch()时,服务器只返回一个带有模型属性和嵌套模型属性的JSON对象。例如,服务器返回:
{
id: "1",
name: "Model",
nestedModel: {
id: "12",
name: "nestedModel"
}
}骨干网不够聪明,无法发现nestedModel实际上是一个“模型”。它将"nestedModel“作为模型上的一个属性。(它只是一个普通的JSON对象,而不是主干对象)
这就是为什么:
model.attributes.nestedModel.attributes.attributeName不管用。
要使其工作,您必须将nestedModel实例化为主干模型。因此,在完成提取之后:(假设nestedModel是NestedModel的一个实例)
model.fetch().done(function() {
model.set('nestedModel', new NestedModel(model.get('nestedModel')));
});您可以通过覆盖parse()方法使脊骨自动为您完成此操作。
在你的模型中:
var NestedModel = Backbone.Model.extend({
//your nested model methods
});
var Model = Backbone.Model.extend({
//do other model stuff
parse: function(response) {
response.nestedModel = new NestedModel(response.nestedModel);
return response;
}
}); 这应该能让你的陈述奏效。但通常我会用
model.get('nestedModel').get('attributeName')有关解析的更多信息,请参见此处:http://backbonejs.org/#Model-parse
要将此模式应用于其他所有具有更大灵活性的模型,您可能需要阅读以下内容:http://www.devmynd.com/blog/2013-6-backbone-js-with-a-spine-part-2-models-and-collections
https://stackoverflow.com/questions/20134592
复制相似问题