2

viewModel の dataModel が不明な場合、applyBindings は可能ですか? 私の問題は、ページでの ajax 呼び出しの後に dataModel 構造が最初に認識されることです。ノックアウト .js を理解するには、ページの読み込み時に viewModel を初期化する必要があります。

nCustomerId is undefined でコードが失敗します。

これをどのように処理すればよいですか?dataModel 構造がわかるまで ko.applyBindings() を呼び出して待つこともできますが (これは ajax 呼び出しの後で行います)、knockout.js を使用するときにそれを行う正しい方法ですか?

function initModel () {
var kunderModel = function () {
    var self = this;
    self.list = ko.observableArray();
    self.selectedItem = ko.observable();
    self.newItem = ko.observable();  

    self.add = function () {
        self.selectedItem(newItem(self.newItem));
        showInputContainer();
    };

    self.getList = function () {
        var nButikId = jQuery("#butikid").val();
        jQuery.ajax({
            url: "crm_service.wso/Dan_Butik_Kunder_Tabel/JSON/",
            data: { nButikId: nButikId },
            success: function (data) {
                self.list(data);
            },
            complete: function () {
                connectExt.UIElements().Loading(false);
            }
        });
    }
}
}

    _viewModel = new kunderModel();
    ko.applyBindings(_viewModel);

    jQuery(document).ready(function () {
        initModel();
    });

<div data-bind="template: { name: 'editTmpl', data: selectedItem }"></div>

<script id="editTmpl" type="text/html">      
    <div  class="opretContainer">
        <div class="opretContainerTitle">
            <span data-bind="visible: nCustomerId == 0">New</span>
            <span data-bind="visible: nCustomerId != 0">Edit</span>
        </div>
    </div>
</script>
4

1 に答える 1

7

initFuctionは必要ありません。すべきことは、 _viewModelを JQuery ドキュメント コールバックで直接初期化することです。

ViewModel 自体が既に関数であることを理解する必要があります。ビューモデルの初期化時にgetList関数をビューモデル内で直接呼び出すことができます。

私がすること:

jQuery(document).ready(function () {
    _viewModel = new kunderModel();
    ko.applyBindings(_viewModel);    
});

そしてkunderModel内より:

var kunderModel = function () {
   var self = this;
   self.list = ko.observableArray();

   self.getList = function () {
       var nButikId = jQuery("#butikid").val();
       jQuery.ajax({ ... });
   };

   self.getList();
}

このようにして、ViewModel の作成の最後にgetListメソッドが呼び出されます。(私はこれを「コンストラクター」によって呼び出されるメソッドと考えています。すべてが監視可能であるため、コールバックが実行されると、UI が自動的に更新されます。

于 2013-02-25T10:10:52.750 に答える