我正在尝试为我的视图模型创建一个通用容器,以便可以在没有特定视图模型知识的情况下将常用方法应用于各种对象。容器和包含的对象如下所示:
var containedViewModel = function() {
var self = this;
self.id = ko.observable();
...
self.doSomething = function() {
alert('here');
};
}
var ContainerModel = function(cRoot, cModel, cName) {
var self = this;
self.rootModel = cRoot; // Root view model
self.viewName = cName; // viewModel container name
self.refModel = cModel; // viewModel reference
self.viewModel = ko.observable(); // Single view model
self.viewModels = ko.observableArray(); // Array of view models
self.init = function(rootModel) {
self.viewModel = new self.refModel();
}
self.doSomething = function() {
self.rootModel.doSomeThing(); // This works
self.refModel.doSomeThing(); // This does not work
self.viewModel.doSomeThing(); // This does not work as well
}
}
容器将通过如下调用创建:
var ParnentModel = function() {
var self = this;
self.id = ko.observable();
...
self.container = new ContainerModel(self, containedViewModel, 'modelName');
...
self.doSomething = function() {
alert('here');
};
};
在此示例中,rootModel 函数访问工作正常,因为实际的视图模型已创建并传递给容器。使用 'new self.refModel()' 和 'self.rootModel.doSomeThing()' 似乎可以按预期工作。当我尝试使用'self.viewModel.doSomeThing();' 淘汰赛抱怨它不是一个功能。
是否可以通过引用 viewModel 来访问 viewModels 函数。
任何帮助,将不胜感激。