ビューモデルの一般的なコンテナを作成しようとしているので、ビューモデルに関する特定の知識がなくても、さまざまなオブジェクトに共通のメソッドを適用できます。コンテナーと含まれるオブジェクトは次のようになります。
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 関数にアクセスすることは可能ですか。
どんな助けでも大歓迎です。