javascript - Knockout 加载另一个 AJAX url 来组合到模型中

标签 javascript jquery ajax json knockout.js

我有一些复杂的问题。 我的第一个 JSON url 具有以下属性:ID、名称和参数。然后当我调用 JSON 时,我想根据 ID 去检索另一个 JSON URL 来获取子 ID。

然后我想输出子 ID、父名称和父参数。

这是 jsFiddle http://jsfiddle.net/c3L7gr4w/1/

这是模型 url 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",
  }
]
}

最佳答案

我认为您需要调整 dataMappingOptions.key,以便当您将子模型加载到原始模型之上时,KO 可以返回不同的 key 。

我想我这里有一个工作 fiddle - 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);
    }        
};

这样做的问题是,当您加载更新的数据时,KO 现在将使用映射来销毁原来的人员并创建新的人员。但是,updatedData 缺少 ParemeterValue,因此您需要将其从原始 JSON 中合并。即使您使用 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 作为额外属性附加,但是您应该能够从中看到如何使其替换 People View 模型和 dataMappingOptions.key 中的原始 ID )

关于javascript - Knockout 加载另一个 AJAX url 来组合到模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28443115/

相关文章:

javascript - 如何获取数据表列的值?

javascript - Cordova本地ajax请求报错

javascript - Zombie.js 不执行同步 ajax 请求

javascript - 谷歌加载器 : Blocked script causes website to load extremley slow in China

javascript - 在元素中禁用 javascript

javascript - 如何在 contenteditable div 中放置插入符号,同时忽略 HTML 标签?

javascript - 使用 angular 指令绘制 highchart 饼图但是当我在成功函数中使用它时它不起作用

php - 尝试在确认中显示数据时,我不断收到未定义的消息

javascript - 如何使用大量粒子获得更好的性能? Canvas

jquery - jqGrid 与 AngularJS