首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过signalr drops属性从主干返回嵌套模型

通过signalr drops属性从主干返回嵌套模型
EN

Stack Overflow用户
提问于 2013-11-22 00:16:56
回答 1查看 118关注 0票数 0

我正在做一个骨干/信号处理器。我有非常简单的模型工作,我可以创建它们的客户端,并通过signalr检索它们。问题是:

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

代码语言:javascript
复制
model.attributes.nestedModel.attributes.attributeName

当我从signalr检索模型时

代码语言:javascript
复制
model.fetch()

模型回来了,但是现在要访问我需要使用的嵌套模型属性

代码语言:javascript
复制
model.attributes.nestedModel.attributeName

嵌套模型上的属性级别被删除,因此导致模板呈现失败。

我怎么才能避开这一切?我做错了什么吗?我是新来的先生/骨干。

顺便说一句,我正在使用backbone.signalr nuget软件包。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 16:02:49

这是因为当您使用fetch()时,服务器只返回一个带有模型属性和嵌套模型属性的JSON对象。例如,服务器返回:

代码语言:javascript
复制
{
  id: "1",
  name: "Model",
  nestedModel: {
    id: "12",
    name: "nestedModel"
  }
}

骨干网不够聪明,无法发现nestedModel实际上是一个“模型”。它将"nestedModel“作为模型上的一个属性。(它只是一个普通的JSON对象,而不是主干对象)

这就是为什么:

代码语言:javascript
复制
model.attributes.nestedModel.attributes.attributeName

不管用。

要使其工作,您必须将nestedModel实例化为主干模型。因此,在完成提取之后:(假设nestedModel是NestedModel的一个实例)

代码语言:javascript
复制
model.fetch().done(function() {
  model.set('nestedModel', new NestedModel(model.get('nestedModel')));
});

您可以通过覆盖parse()方法使脊骨自动为您完成此操作。

在你的模型中:

代码语言:javascript
复制
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;
  }
}); 

这应该能让你的陈述奏效。但通常我会用

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20134592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档