我正在嘗試爲我的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