Backbone.js 通过signalr属性从主干返回嵌套模型
我正在开发主干/信号机POC。我有非常简单的模型工作,我可以在客户端创建它们,并通过信号器检索它们。 问题是: 如果使用嵌套模型创建模型的客户端版本,则可以访问如下属性:Backbone.js 通过signalr属性从主干返回嵌套模型,backbone.js,model,signalr,fetch,Backbone.js,Model,Signalr,Fetch,我正在开发主干/信号机POC。我有非常简单的模型工作,我可以在客户端创建它们,并通过信号器检索它们。 问题是: 如果使用嵌套模型创建模型的客户端版本,则可以访问如下属性: model.attributes.nestedModel.attributes.attributeName 当我通过从信号器检索模型时 model.fetch() 模型返回,但现在要访问我需要使用的嵌套模型属性 model.attributes.nestedModel.attributeName 嵌套模型上的属性级别将被
model.attributes.nestedModel.attributes.attributeName
当我通过从信号器检索模型时
model.fetch()
模型返回,但现在要访问我需要使用的嵌套模型属性
model.attributes.nestedModel.attributeName
嵌套模型上的属性级别将被删除,因此这将导致模板渲染失败
我该怎么做?我做错什么了吗?我是新来的信号员/骨干
顺便说一句,我正在使用backbone.signalr nuget包
谢谢。这是因为当您使用fetch()时,服务器只返回一个带有模型属性和嵌套模型属性的JSON对象。例如,服务器返回:
{
id: "1",
name: "Model",
nestedModel: {
id: "12",
name: "nestedModel"
}
}
主干网不够聪明,无法判断nestedModel实际上是一个“模型”。它将“nestedModel”视为模型的一个属性。(它只是一个常规JSON对象,而不是主干对象)
这就是为什么:
model.attributes.nestedModel.attributes.attributeName
不起作用
要使其工作,必须将nestedModel实例化为主干模型。因此,在获取完成后:(假设您的nestedModel是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')
有关解析的更多信息,请参见此处:
要在所有其他模型中更灵活地应用此模式,您可能需要阅读以下内容:
太棒了,谢谢。我知道原因,但我不确定在客户身上最好的处理方式是什么。重写解析是处理它的好方法。
model.get('nestedModel').get('attributeName')