2012-10-04 53 views
0

我需要使用knockout映射插件以ajax json數據動態更新對象。但屬性類型會改變。例如,我接收到類似JSON數據:使用Knockout映射插件即時更改屬性類型

{ 「類型」: 「A」, 「輸出」: 「這是一個」}

{ 「類型」: 「B」, 「輸出」:{ 「名稱」: 「B」}}

{ 「類型」: 「C」, 「輸出」:[ 「C1」, 「C2」, 「C3」]}

我在前端有不同的視圖模板來根據類型顯示我的模型。但問題是ko.mapping.fromJS(data,{},viewModle)不起作用,因爲輸出類型不固定。我如何動態地映射它?

回答

0

您可以創建多個表示每種類型的javascript對象。 您可以養活一個自定義映射到你可以控制哪些類型的對象被創建的對象的創建方式(以及插件

事情是這樣的:

var mapping = { 
create: function(json) { 
    if(json.data.Type == 'A'){ 
     return new YourTypeA(); 

    } 
    //same for your other types 
} 
} 

var data = '[{ "Type": "A", "Titel": "Title1", "Description": "Description 1" }, { "Type": "B", "Titel": "Title 2", "Description": "Description 2" }, { "Type": "C", "Titel": "Title  3", "Description": "Description 3"}]'; 
    ko.mapping.fromJS(eval(data), mapping, viewModel); 

希望這有助於

+0

是的,你有什麼建議的作品。但我有一個像二十種不同的類型,否則這手動是痛苦的。在更新數據的同時,我可以做些什麼來刪除「output」屬性,並讓knockout自動映射它。 – maple

0

,我發現自己的答案。只要把項的數組中,然後映射將是一件好事。

data = [{"type" : "A", "output" : "This is A" }] 
ko.mapping.fromJS(data, {}, viewModle) 
data = [{"type" : "B", "output" : {"Name" : "B"}}] 
ko.mapping.fromJS(data, {}, viewModle) 
相關問題