1

フィールドをjson文字列および配列として返すretrieveEntity Webサービスメソッドがあります。ビューモデルをそのまま維持しながら、これらのフィールドをテキストボックスにバインドするのに問題があります。まず、データを初期化して保存するために ajax 呼び出しを行います。次に、ビューモデル内で値を取得し、目的のテキスト ボックスにバインドします。コードは次のとおりです。

 <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) }

     });

 }     

X が返すものの小さなスニペットを次に示します。

{
"Entities": {
    "Entity": [{
        "Index": "1",
        "Name": "BatchNumber",
        "Value": ""
    }, {
        "Index": "2",
        "Name": "InvoiceNumber",
        "Value": ""
    }]
},
"APInvoiceHeader": {
    "VoucherNumber": "",
    "PayLocationID": "",
    "InvoiceDescription": "",
    "InvoiceTypeID": "",
    "TermsRuleID": "",
    "TaxTypeID": "",
    "RecurringInvoice": 0,
    "APInvoiceItems": [{
        "FixedAssetReferences": [{
            "FixedAssetReferenceId": 0,
            "FixedAssetReferenceIdSpecified": true,
            "FormattedGLAccount": ""
        }]
    }

次に、返されたデータに基づいてビューモデルを構築します。

        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"

また

data-bind="value:myViewModel.arrayentity().Entities.Entity()[0].Name"

ただし、バインディング構文でエラーが発生します。代わりに、ビューモデルを解析して全体として使用することはできません:

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

また

myViewModel.arrayentity([(ko.mapping.fromJS(passedmodel.Entities.Entity[0])),    (ko.mapping.fromJS(passedmodel.Entities.Entity[1]))]);

HTMLバインディングは次のようになります

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

また

 data-bind="value:myViewModel.arrayentity()[0].Name"

これは問題なくバインドされますが、それは私がビューモデルをどのように見せたいかではありません。ビューモデルをそのまま保持して解析またはナビゲートする必要があるのは、次に画面上の値を更新する必要があるためです。これにより、ビューモデルが更新され、ビューモデルが JS に変換され、保存する別の ajax 呼び出しに渡されます。新しいデータ。

誰でも助けてもらえますか?ヒントをいただければ幸いです。ありがとう!

4

0 に答える 0