我正在研究骨干/信号器POC。我有非常简单的模型工作,我可以创建它们客户端并通过信号器检索它们。 问题是:
如果我使用嵌套模型创建模型的客户端版本,我可以访问如下属性:
model.attributes.nestedModel.attributes.attributeName
当我从信号器通过
检索模型时model.fetch()
模型回来但现在要访问我需要使用的嵌套模型属性
model.attributes.nestedModel.attributeName
嵌套模型上的属性级别被删除,因此导致模板呈现失败
我如何解决这个问题?难道我做错了什么?我是信号员/骨干的新手。
BTW,我正在使用backbone.signalr nuget包。
感谢。
答案 0 :(得分:0)
这是因为当您使用fetch()时,服务器只返回一个带有模型属性和嵌套模型属性的JSON对象。例如,服务器返回:
{
id: "1",
name: "Model",
nestedModel: {
id: "12",
name: "nestedModel"
}
}
骨干网不够聪明,无法弄清楚nestedModel实际上是一个“模型”。它将“nestedModel”视为Model上的属性。 (它只是一个常规的JSON对象,而不是骨干对象)
这就是为什么:
model.attributes.nestedModel.attributes.attributeName
不起作用。
要使其工作,您必须将nestedModel实例化为Backbone Model。所以在完成提取之后:(假设你的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