Javascript 从外部访问Knockout JS 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) {

我有一个KnockoutJS视图模型,它有一个我需要访问的函数。最初填充ViewModel并调用
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我已经添加了一些关于我在你的代码中看到的问题的评论,并添加了一个改进版本的建议。