如何从外面访问knockoutJS视图模型

时间:2015-06-07 12:00:16

标签: knockout.js

我试图以这种方式从外面访问KnockoutJS viewmodel。我的目标是从外面将数据推送到KnockoutJS视图模型。

function AddNewData()
{
    //alert("add");
    appViewModel.Stocks.push.apply(self.Stocks,NewData);

    ko.utils.arrayForEach(NewData, function(item)
    {
        //appViewModel.Stocks.push.apply(item);
        alert(item.Name);
        //appViewModel.Stocks.push(ko.mapping.fromJS(item));

    })    

}

这是我的JSFiddle http://jsfiddle.net/tridip/62Ls6x9n/161/,在点击添加新数据时什么都不做。

我的代码中有什么错误?

1 个答案:

答案 0 :(得分:2)

这些是错误:

  1. 你有两个UpdateData。一个是数组,另一个是函数。
  2. 您没有实例化appViewModel,只是将一个函数传递给ko.applyBindings
  3. 您的函数既不是appViewModel的成员也不是原型方法,因此Knockout无法在HTML视图中访问它们(在本例中通过点击绑定)。如果您想在Knockout中绑定事件,这只是一个问题。
  4. Nr.2是您无法访问它的原因;你应该首先实例化你的viewModel并将它放在一个变量中,如下所示:

    var appInstance = new appViewModel(data);
    ko.applyBindings(appInstance);
    

    然后,您可以通过appInstance[property]引用您的viewmodel。您还可以通过在函数中执行ko.dataFor/ ko.contextFor(element)来获取DOM元素的数据。

    摆弄常规点击装订:http://jsfiddle.net/kevinvanlierde/62Ls6x9n/166/
    摆弄VM外的功能:http://jsfiddle.net/kevinvanlierde/62Ls6x9n/170/