2015-02-10 24 views
0

我有一些複雜的問題。 我的第一個JSON網址有這個屬性,ID,名稱和參數。然後,當我調用JSON時,我想要根據ID檢索另一個JSON URL以獲取子ID。Knockout加載另一個AJAX網址以結合到模型

然後我想輸出爲子ID,父母名稱和父母參數。

這裏是的jsfiddle http://jsfiddle.net/c3L7gr4w/1/

,這裏是模型的網址1

[ 
{ 
    "ParemeterValues": "Actual,2011,SYS.LoadCompanies,y,y", 
    "ID": "1771cdf7-7a73-49e4-8538-0d0cad965226",  
    "Name": "EXEC.Data.PLandBS.FromFMISMultipleCompanies", 
}, 
{ 
    "ParemeterValues": "Actual,2012", 
    "ID": "19439ce4-240c-4f2a-98ee-47cb1708b339", 
    "Name": "Data.BS.BringForwardOpeningBalances", 
} 
] 

和URL2

{ 
"ID": "1771cdf7-7a73-49e4-8538-0d0cad965226", 
"Name": "EXEC.Data.PLandBS.FromFMISMultipleCompanies", 
"TM1.ChoreProcessesProcess": 
[ 
    { 
    "Name": "EXEC.Data.PLandBS.FromFMISMultipleCompanies", 
    "ID": "dd1acc0b-51ff-4844-b6c4-c67640b326c4", 
    } 
] 
} 
+0

你的JS代碼示例不好看。檢查大括號平衡。理想情況下[使你的問題*工作*再現](http://stackoverflow.com/help/mcve)。例如,您可以使用內置的代碼片段或jsFiddle。也請改善你的解釋,你的問題很混亂。 – Tomalak 2015-02-11 02:40:22

+0

好吧,對於開始,這是一個jsFiddle http://jsfiddle.net/c3L7gr4w/1/ 如何將ID更改爲dd1acc0b-51ff-4844-b6c4-c67640b326c4而其他信息是相同的,當加載更新的數據點擊。 VAR updatedData = [{ 「ID」: 「1771cdf7-7a73-49e4-8538-0d0cad965226」, 「名稱」: 「EXEC.Data.PLandBS.FromFMISMultipleCompanies」, 「TM1.ChoreProcessesProcess」: [ { 「名稱」: 「EXEC.Data.PLandBS.FromFMISMultipleCompanies」, 「ID」: 「dd1acc0b-51FF-4844-b6c4-c67640b326c4」 } ] } ]; – 2015-02-11 03:28:35

+0

以及西蒙據我所知去,你必須這樣做:http://jsfiddle.net/c3l7gr4w/2/ – 2015-02-11 14:44:01

回答

1

我認爲你需要調整你的dataMappingOptions.key使模型當您將您的兒童模型加載到原始模型上時,KO可以返回不同的鍵。

我有一個工作小提琴這裏,我想 - http://jsfiddle.net/sifriday/c3L7gr4w/4/

dataMappingOptions現在看起來像:

var dataMappingOptions = { 
    key: function(data) { 
     var ChildID = ""; 
     if (data["TM1.ChoreProcessesProcess"] != undefined) 
      ChildID = data["TM1.ChoreProcessesProcess"][0].ID 
     return data.ID + ChildID;  
    }, 
    create: function(options) { 
     return new Person(options.data); 
    }   
}; 

這樣做的問題是,當你加載你的updatedData KO現在將使用映射摧毀你原來的人,並創造新的人。但是,updatedData缺少ParemeterValue,所以您需要從原始JSON中合併它。這將是OK,即使您使用Ajax,因爲你可以保存原始JSON在一個變量的地方:

loadUpdatedData: function() { 
    // You need to merge in paremeterValues from your orig JSON 
    updatedData[0].ParemeterValues = data[0].ParemeterValues; 
    // Now good to go... 
    ko.mapping.fromJS(updatedData, dataMappingOptions, viewModel.people); 
} 

(我也做到了,這樣childID的附加作爲一個額外的屬性,但你應該能夠從該來看看如何讓它代替原來的ID在這兩個人民視圖模型,並在dataMappingOptions.key)

相關問題