0

私はKnockout AMD Helpersを使用して ViewModel をロードし、「モジュール バインディング」機能を使用しています。

通常、リモート データをロードする必要がある場合、遅延オブジェクトを使用して、すべてのデータが ViewModel で利用可能になった後にのみ ko.ApplyBindings が呼び出されるようにします。

遅延 ajax 呼び出しを使用して問題を説明するために、サンプル jsfiddleを作成しました。

self.initialize = function () {
                    self.name("This is a sample article");
                    self.getArticleTypes(self.articleTypes);
                };

self.getArticleTypes = function (observableArticleTypes) {
                    var fakeData = {
                        delay: 5
                    };
                    $.ajax({
                        async: true,
                        cache: false,
                        type: 'post',
                        url: '/echo/json/',
                        data: fakeData,
                        success: function (data) {
                            observableArticleTypes([{
                                id: 1,
                                articleType: 'Breaking News'
                            }, {
                                id: 2,
                                articleType: 'Weather'
                            }]);

                            console.log("Data loaded from server");

                        }
                    });
                };

AMD ヘルパーを使用しながら、ViewModel ですべてのデータの準備ができるまで ApplyBindings を遅らせて、コードを設計するにはどうすればよいですか?

4

1 に答える 1

1

このタイプのシナリオでは、applyBindings が既に発生しているため、データが利用可能になったときに監視可能なセクションを更新できるようにするか、ifまたはwithまたはtemplateバインディングを使用して特定のセクションを制御する必要があります。

たとえば、次のように領域をラップできます。

<div data-bind="if: articleTypes().length">
    ....
</div>
于 2013-08-05T15:08:51.447 に答える