В представлении есть заголовок, за которым следует раздел с подменю. дизайн для ViewModels ниже:Как получить экземпляр вложенной модели представления-нокаут
SettingsViewModel = function (pName) {
var self = this;
self.productName = ko.observable(pName), //heading
self.sections = ko.observableArray([
{ checkboxID: ko.observable(), checkboxIDState: ko.observable(), sectionname: ko.observable(), sectionState: ko.observable() }
]), //submenus
self.Addsections = function (checkboxid, sIdState, sName, sState) {
this.sections.push({ checkboxID: checkboxid, checkboxIDState: sIdState, sectionname: sName, sectionState: sState });
}
};
function MainViewModel() {
var self = this;
self.products = ko.observableArray([]);
self.AddProducts= function (pname) {
self.products.push(new SettingsViewModel(pname));
}
};
$(document).ready(function() {
VM = new MainViewModel();
ko.applyBindings(VM, document.getElementById("divd"));
data= []; //some dummy data
CallMEnus(data);
});
function CallMEnus(data) {
var str = "";
$(data).each(function (index, products) {
VM.AddProducts(products.name);
$(products.section).each(function (index, section) {
var ChkboxId = "data";
var chkboxIdState = 'datt';
var chkboxIdState += " checked";
}
//how to call the products add section method?
VM.products()[index].Addsections(ChkboxId, chkboxIdState, section.name, section.state);
});
});
Мне нужно вызвать метод AddSections вложенной SettingsViewModel из экземпляра MainViewModel. Как достичь этого?
Заранее спасибо.
«Я хотел бы использовать EventAggregator разъединить ViewModels» является идеальным комментарий, но не ответ. Пожалуйста, разверните свой ответ, чтобы указать, как и почему OP должен использовать EventAggregator здесь, а не просто скопировать некоторый пример кода, который вы написали для чего-то другого. – nemesv