Javascript knockoutjs映射到JSON多个数组

Javascript knockoutjs映射到JSON多个数组,javascript,arrays,json,knockout.js,Javascript,Arrays,Json,Knockout.js,我已经将两个独立的列表(请求和公司)捆绑到一个JSON对象中,并尝试将其映射到JavaScript端的两个淘汰对象 最初,我一次只传递一个列表(JSON中没有数组名)或映射函数中的include行,效果很好。 当我将数组名(例如“RequestList”=)添加到JSON中时,它就停止了工作。谢谢 您的标记中有几个小错误,不允许脚本在映射问题之外工作,我无法真正理解您为什么要尝试对没有类似定义的对象进行映射。。。例如,RequestJS对象具有RequestID和Name,而视图模型不包含任何

我已经将两个独立的列表(请求和公司)捆绑到一个JSON对象中,并尝试将其映射到JavaScript端的两个淘汰对象

最初,我一次只传递一个列表(JSON中没有数组名)或映射函数中的include行,效果很好。 当我将数组名(例如“RequestList”=)添加到JSON中时,它就停止了工作。谢谢


您的标记中有几个小错误,不允许脚本在映射问题之外工作,我无法真正理解您为什么要尝试对没有类似定义的对象进行映射。。。例如,RequestJS对象具有RequestID和Name,而视图模型不包含任何这些字段

我已经清理了您的代码以使用映射,您可以在这里看到一个工作示例

因此,我建议您只使用简单映射,使用下面的方法将JS对象转换为视图模型

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>

请参阅上的脚本


如果您正计划使用JS字段,则无需执行任何视图定义

我发现的一种解决方法是将数据对象的子集传递给映射函数:ko.mapping.fromJS(数据[“RequestList”]、self.requestMapping、self.requests);谢谢你的输入Sam。我提供了我的项目的基本框架作为示例,只包括几个示例字段。假设我想在表中显示请求列表。但是,请求列表仅包括companyID,而不包括公司名称。此外,该页面还允许用户从下拉列表中选择新公司。我将多个列表合并到一个Ajax调用中,因为有人告诉我,数据请求最好是大块的,而不是闲聊的。
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);
});
<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>