我试图以这种方式从外面访问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/,在点击添加新数据时什么都不做。
我的代码中有什么错误?
答案 0 :(得分:2)
这些是错误:
UpdateData
。一个是数组,另一个是函数。appViewModel
,只是将一个函数传递给ko.applyBindings
。appViewModel
的成员也不是原型方法,因此Knockout无法在HTML视图中访问它们(在本例中通过点击绑定)。如果您想在Knockout中绑定事件,这只是一个问题。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/