2013-11-22 92 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