我正在尝试为我的viewModels创建一个通用容器,因此常见的方法可以应用于各种对象,而不需要特定的知识或视图模型。容器和包含的对象应该是这样的:通过原型访问viewModel函数
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功能接入工作正常,因为实际的viewmodel被创建并传递给容器。使用'new self.refModel()'和'self.rootModel.doSomeThing()'似乎按预期工作。当我尝试使用'self.viewModel.doSomeThing();'淘汰赛抱怨说这不是一项功能。
是否有可能通过引用viewModel来访问viewModels函数。
任何帮助,将不胜感激。
我很高兴帮助。如果你愿意,你可以接受答案。 – Stefan