Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 通过signalr属性从主干返回嵌套模型_Backbone.js_Model_Signalr_Fetch - Fatal编程技术网

Backbone.js 通过signalr属性从主干返回嵌套模型

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 嵌套模型上的属性级别将被

我正在开发主干/信号机POC。我有非常简单的模型工作,我可以在客户端创建它们,并通过信号器检索它们。 问题是:

如果使用嵌套模型创建模型的客户端版本,则可以访问如下属性:

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')