2013-11-22 56 views
0

我正在主干/信号器POC上工作。我有非常简单的模型工作,我可以创建他们的客户端,并通过信号检索他们。 问题是这样的:从主干通过信号衰落返回嵌套模型属性属性

如果我创建了一个模型的客户端版本的嵌套模式,我可以像这样访问属性:

model.attributes.nestedModel.attributes.attributeName 

当我通过

检索signalr模型
model.fetch() 

模型回来,但现在访问我需要使用

model.attributes.nestedModel.attributeName 
嵌套模特属性

嵌套模型上的属性级别会丢失,因此会导致模板渲染失败

如何解决此问题?难道我做错了什么?我对signalr/backbone是新手。

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

谢谢。

回答

0

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

{ 
    id: "1", 
    name: "Model", 
    nestedModel: { 
    id: "12", 
    name: "nestedModel" 
    } 
} 

骨架没有足够的智慧弄清楚,nestedModel实际上是一个“模范”。它将“nestedModel”视为Model上的一个属性。 (这只是一个普通的JSON对象,而不是骨干对象)

这就是为什么这样的:

model.attributes.nestedModel.attributes.attributeName 

不起作用。

要使它工作,你必须实例化nestedModel作为骨干模型。所以取后完成:(假设你的nestedModel是NestedModel的一个实例)

model.fetch().done(function() { 
    model.set('nestedModel', new NestedModel(model.get('nestedModel'))); 
}); 

您可以通过骨干网覆盖的解析()方法自动为您完成此。

在你的模型:

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

+0

这真棒谢谢你。我知道为什么,但我不确定在客户端处理它的最佳方式是什么。重写分析是处理它的好方法。 – jmichas