0

我在我的项目中使用 knockout.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。但是,我要求对于一个局部视图,我们通过 Jquery 调用第三方 Web 服务并填充上面的 listOfChildren 属性。

问题是目前对 web 服务的调用发生在 document.ready 上,这意味着每次页面刷新都会调用 web 服务。我只想在用户加载部分视图时拨打电话。

我试图在部分视图页面上将调用移动到第三方 Web 服务,但它显示 viewModel 为空。

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

有人可以帮助我如何达到最好的效果吗?

4

1 回答 1

1

将调用移动到局部视图后getChildren无法找到的原因有两个:viewModel

  1. viewModel作用于document.ready函数,在外面不可见
  2. 调用是在创建getChildren之前发生的viewModel

这是我的建议:将getChildren调用保留在内部document.ready,但仅在局部视图存在时通过搜索仅存在于局部视图中的内容来执行它。如果你找到它,然后加载孩子。

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