Javascript 从外部访问Knockout JS ViewModel函数
我有一个KnockoutJS视图模型,它有一个我需要访问的函数。最初填充ViewModel并调用Javascript 从外部访问Knockout JS ViewModel函数,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我有一个KnockoutJS视图模型,它有一个我需要访问的函数。最初填充ViewModel并调用ko.applyBindings。这一切都很好 问题是当试图从viewModel外部(即从其他JavaScript代码)调用viewModel.RefreshData()函数时 Mozilla正在报告类型错误:viewModel。RefreshData不是一个函数。我认为问题可能与敲除映射插件“覆盖”函数有关 代码如下: var EditorViewModel = function (data) {
ko.applyBindings
。这一切都很好
问题是当试图从viewModel外部(即从其他JavaScript代码)调用viewModel.RefreshData()函数时
Mozilla正在报告类型错误:viewModel。RefreshData
不是一个函数。我认为问题可能与敲除映射插件“覆盖”函数有关
代码如下:
var EditorViewModel = function (data) {
var _self = this;
_self.Data = ko.observable('');
_self.LoadData = function () {
_self.Data(new ChildViewModel(data));
};
_self.RefreshData = function (_data) {
_self.Data(new ChildViewModel(_data));
};
_self.LoadData(data);
return _self;
};
var ChildViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
};
// On first load with modelData from AJAX:
var viewModel = new EditorViewModel(modelData);
ko.applyBindings(viewModel);
// When refreshing with newModelData from AJAX call:
viewModel.RefreshData(newModelData); // ERROR IS THROWN HERE!
请注意,使用ChildViewModel是为了刷新数据/视图。错误描述似乎与您提供的代码不匹配:在错误消息中,您尝试在构造函数EditorViewModel
上调用RefreshData
,而不是在实例化对象viewModel
上调用@janfohe我编辑了问题以更正此问题,我使用您提供的代码进行了测试,效果良好:@Graham您忽略了实际的AJAX调用。我怀疑这就是你的问题所在-viewModel
在某种程度上超出了范围。@Graham我已经添加了一些关于我在你的代码中看到的问题的评论,并添加了一个改进版本的建议。