4

ノックアウトで2つのビューモデルを設定しています。

$.getJSON("/api/administrators", function (data) {        
    var AccessViewModel = {
        administrators: ko.observableArray(data)
    };
    ko.applyBindings(AccessViewModel);

});

$.getJSON("/api/roles", function (data) {
    var RolesViewModel = {
        definedRoles: ko.observableArray(data)
    };
    ko.applyBindings(RolesViewModel);

});

ビュー内の管理者から情報を取得することはできますが、definedRolesから何も引き出す​​ことができません。ロールの.getJSON関数内にアラートを追加すると、データが返されます。RolesViewModelを作成してから、次のように呼び出すと、何か問題があるようです。

<ul data-bind="foreach: definedRoles">
    <li data-bind="text: name"></li>
</ul>

誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

8

ko.applyBindingsセクションごとに1回だけ呼び出すことができます。2番目のパラメーターを渡さない場合、セクションはページ全体になります。のような特定のセクションがある場合は、DIVそれを2番目のパラメーターとして渡す必要があります。

または、両方のリストのプロパティを使用して、ページの1つのビューモデルを作成し、ページをこの単一のビューモデルにバインドすることもできます。このアプローチをお勧めします。そのコードは次のようになります。

var ViewModel = function() {
    this.administrators = ko.observableArray([]);
    this.definedRoles = ko.observableArray([]);
};

var vm = new ViewModel();
ko.applyBindings(vm);

$.getJSON("/api/administrators", function (data) {
    vm.administratos(data);
});

$.getJSON("/api/roles", function (data) {
    vm.definedRoles(data);
});

ko.applyBindings呼び出す必要があるのは1回だけなので、できるだけ早く呼び出す必要があることを忘れないでください。ajaxメソッドから呼び出すことは、いくつかの理由から一般的に悪い考えです。1つは、ajaxメソッドを更新呼び出しとして再利用できなくなったことです。2つ目は、他のページ機能は、ajaxメソッドが機能を開始するために戻るまで待機する必要があります。

于 2013-03-25T18:05:56.413 に答える
7

Tyrsiusの答えは正しいですが、後で参照できるように、2つの異なるビューモデルを同じページにバインドできます。次のようなモデルをバインドする必要があります

ko.applyBindings(wallView,$("#WallKo")[0]);

選択したIDを持つdivでhtmlをラップします。

<div id = "WallKo">
    <div data-bind="foreach:posts">
         .....
    </div>
</div>

次に、各ページに必要な数のビューモデルを設定できます。

于 2013-03-25T19:00:13.160 に答える
0

モデルを特定のdivにバインドする方法の例をありがとう。非常に役立ちます

于 2015-03-19T17:02:36.703 に答える