0

プロジェクトでノックアウト.jsを使用して、モデルをビューにバインドしています。基本的に、document.ready 関数では以下のコードを使用します。

 var viewModel = {
        firstName: ko.observable("John")
        listofChildren=ko.observablearray()
    };
    ko.applyBindings(viewModel);
    dataService.getChildren(viewModel); // This is no good need to move to partial view

ほとんどのページで上記のviewModelを使用できます。ただし、1 つの部分ビューに対して、Jquery によってサード パーティの Web サービスを呼び出し、上記の listOfChildren プロパティを設定する必要があります。

問題は、現時点で webservice への呼び出しが document.ready で発生することです。これは、ページを更新するたびに web サービスが呼び出されることを意味します。ユーザーが部分ビューをロードした場合にのみ呼び出しを行いたいです。

部分ビュー ページでサード パーティの Web サービスへの呼び出しを移動しようとしましたが、viewModel が null であると表示されます。

dataService.getChildren(viewModel); //where dataService is a function which uses ajax call to webservice and populates the listofChildren array.

上記をどのように達成できるか教えてください。

4

1 に答える 1

1

呼び出しを部分ビューに移動した後、呼び出しを移動しgetChildrenても見つからなかった理由は 2 つあります。viewModel

  1. viewModel関数にスコープされておりdocument.ready、そこの外では見えません
  2. への呼び出しは、が作成さgetChildrenれる前に発生していましたviewModel

私がお勧めするのは次のとおりです。getChildren呼び出しは 内document.readyに残しますが、部分ビューにのみ存在するものを検索して、部分ビューが存在する場合にのみ実行します。見つかったら、子をロードします。

if ($('#SomethingInPartialView').length) {
    dataService.getChildren(viewModel);
}
于 2013-05-13T13:47:52.237 に答える