我已经将两个独立的列表(请求和公司)捆绑到一个JSON对象中,并且我试图将它映射到JavaScript端的两个淘汰对象。
最初,我一次只传递一个列表(没有JSON中的数组名称)或映射函数中的include行,它运行得很好。 一旦我将数组名称(例如" RequestList" =)添加到JSON,它就会停止工作。谢谢!
https://jsfiddle.net/yth4vx0z/1/
<table>
<tbody data-bind="foreach:requests">
<tr>
<td data-bind="text:RequestID"></td>
</tr>
</tbody>
</table>
<table>
<tbody data-bind="foreach:companies">
<tr>
<td data-bind="text:CompanyID"></td>
</tr>
</tbody>
</table>
以下是JavaScript代码:
var myViewModel;
$(function () {
myViewModel = new viewModel();
ko.applyBindings(myViewModel);
myViewModel.load();
});
var requestModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
}
var companyModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
}
var viewModel = function () {
var self = this;
self.requestMapping = {
include: ['RequestList'],
create: function (options) {
return new requestModel(options.data);
}
};
self.companyMapping = {
include: ['CompanyList'],
create: function (options) {
return new companyModel(options.data);
}
};
self.requests = ko.observableArray();
self.companies = ko.observableArray();
self.load = function () {
$.ajax(
{
json: ko.toJSON(fakeData)
success: function (data) {
ko.mapping.fromJS(data, self.requestMapping, self.requests);
ko.mapping.fromJS(data, self.companyMapping, self.companies);
},
error: function () {
}
});
}
}
var fakedata =
"RequestList": [
{
"RequestID": 12,
"ContactID": 29
}
],
"CompanyList": [
{
"CompanyID": 28,
"Name": "CoName"
},
{
"CompanyID": 29,
"Name": "Name"
}
]
答案 0 :(得分:0)
标记中存在一些小错误,这些错误不允许脚本与映射问题分开工作,我无法真正理解为什么要尝试对没有类似的对象进行映射定义...例如Request JS对象具有RequestID和Name,而视图模型不包含任何这些字段......
我已经清理了您的代码以使用映射,您可以在此处查看工作示例 https://jsfiddle.net/ka4b1591/23/
据说,我建议你使用简单的映射将JS对象转换为View Models,使用下面的方法。
var fakeData = {
"RequestList": [
{
"RequestID": 12,
"ContactID": 29
}
],
"CompanyList": [
{
"CompanyID": 28,
"Name": "CoName"
},
{
"CompanyID": 29,
"Name": "Name"
}
]};
var myView = ko.mapping.fromJS(fakeData);
$(document).ready(function(){
ko.applyBindings(myView);
});
和html
<table>
<tbody data-bind="foreach:RequestList">
<tr>
<td data-bind="text:RequestID"></td>
</tr>
</tbody>
</table>
<table>
<tbody data-bind="foreach:CompanyList">
<tr>
<td data-bind="text:CompanyID"></td>
</tr>
</tbody>
</table>
参考https://jsfiddle.net/fwq46ojf/3/
上的脚本如果您只是计划使用JS字段
,则无需执行任何视图定义