Javascript 将ajax调用返回的复杂数组数据绑定到viewmodel

Javascript 将ajax调用返回的复杂数组数据绑定到viewmodel,javascript,html,jquery,knockout.js,knockout-mapping-plugin,Javascript,Html,Jquery,Knockout.js,Knockout Mapping Plugin,我有一个RetrieveEntityWeb服务方法,它以json字符串和数组的形式返回字段。我无法将这些字段绑定到文本框,同时保持视图模型不变。首先,我调用ajax来初始化数据并保存它。然后,在viewmodel中,我重新记录这些值,并绑定到所需的文本框。代码如下: <script type="text/javascript" language='javascript'> jQuery(function () { myViewModel = new viewmodel(

我有一个RetrieveEntityWeb服务方法,它以json字符串和数组的形式返回字段。我无法将这些字段绑定到文本框,同时保持视图模型不变。首先,我调用ajax来初始化数据并保存它。然后,在viewmodel中,我重新记录这些值,并绑定到所需的文本框。代码如下:

 <script type="text/javascript" language='javascript'>
 jQuery(function () {
     myViewModel = new viewmodel();
     ko.applyBindings(myViewModel);
 });


 var invoice = function () {
     var initializeURL = "ajaxwebservicecalls.asmx/RetrieveEmptyEntity";
     $.ajax({
         type: "Post",
         url: initializeURL,
         data: {},
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function retrieveemptyesuccess(msg) {
             passedmodel = (msg.d.Data);
             var data = ko.mapping.fromJS(passedmodel);
             var x = $.toJSON(passedmodel)
         },
         Error: function initializefail(msg) { alert(msg) }

     });

 }     
接下来,我将根据返回的数据构建viewmodel:

        var passedmodel;
        var myViewModel;
        var viewmodel = function () {

            this.invoice = ko.observable(new invoice());
            this.arrayentity = ko.observableArray([new invoice("ff"), new invoice("dd"), new invoice("zz"), new invoice("rr")]);

            this.RetrieveEntity = function () {
                var retrieveURL = "ajaxwebservicecalls.asmx/RetrieveEntity";
                $.ajax({
                    type: "Post",
                    url: retrieveURL,
                    data: {},
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function retrievesuccess(msg) {
                        passedmodel = msg.d.Data;

    myViewModel.invoice(ko.mapping.fromJS(passedmodel, {}, myViewModel)); }
//我希望能够使用上述内容,然后在HTML绑定中指定,例如:

data-bind="value:myViewModel.invoice().APInvoiceHeader.VoucherNumber"

然而,绑定语法给了我一个错误。相反,我解析了viewmodel,无法将其作为一个整体使用:

myViewModel.invoice(ko.mapping.fromJS(passedmodel.APInvoiceHeader, {}, myViewModel));

然后HTML绑定看起来像

  data-bind="value:myViewModel.invoice().VoucherNumber

绑定很好,但我不希望viewmodel看起来像这样。 我需要将viewmodel保持为一体并进行解析或浏览的原因是,我需要在屏幕上下一次更新值,更新viewmodel,然后将viewmodel转换回JS,并将其传递给另一个保存新数据的ajax调用


有人能帮忙吗?任何提示都将不胜感激。谢谢

你能把这些东西拼凑起来吗。这将使您的问题更容易排除。
myViewModel.invoice(ko.mapping.fromJS(passedmodel.APInvoiceHeader, {}, myViewModel));
myViewModel.arrayentity([(ko.mapping.fromJS(passedmodel.Entities.Entity[0])),    (ko.mapping.fromJS(passedmodel.Entities.Entity[1]))]);
  data-bind="value:myViewModel.invoice().VoucherNumber
 data-bind="value:myViewModel.arrayentity()[0].Name"