淘汰多视图模型 - 未定义

Knockout multiple view models - undefined

我正在开发一个 UI,它在一个主视图模型中包含多个视图模型。你可以看到下面的结构:

function commonVM() {
   self = this;

   //initialize observable variables
   self.start_searching_visible = ko.observable(true); //start searching panel visible    
};

function searchCriteriaVM() {
   self = this;

   self.window_location = ko.observable("#/");
   self.company_search_criteria_visible = ko.observable(true);    
}

appViewModel = function () { 
   self = this;

   //False if the view has already been initialized
   isInitialized = false;
   self.commonViewModel = new commonVM();
   self.searchCriteriaViewModel = new searchCriteriaVM();     
   self.commonViewModel.start_searching_visible();     
}

var test = new appViewModel();
ko.applyBindings(test);

我收到 searchCriteriaViewModel 未定义错误。为什么我得到这个?为什么我在上面的语句中已经初始化了这个变量却不能访问?

当你decalre变量时使用var。当您错过 var 关键字时,变量将被声明为全局变量。在您的情况下,self 首先引用 appViewModel,但是当您创建 commonVM 时,self 变量被分配了不同的值,然后它在全局范围内具有不同的含义。

但是你有很多其他错误 - 没有将 start_searching_visible 附加到 this/self 并且无法从实例访问它,从错误的视图模型调用 start_searching_visible 等..

function commonVM() {
    var self = this;

    //initialize observable variables
    self.start_searching_visible = ko.observable(true); //start searching panel visible    
};

function searchCriteriaVM() {
    var self = this;

    self.window_location = ko.observable("#/");
    self.company_search_criteria_visible = ko.observable(true);
}

appViewModel = function() {
    var self = this;

    //False if the view has already been initialized
    self.isInitialized = false;
    self.commonViewModel = new commonVM();
    self.searchCriteriaViewModel = new searchCriteriaVM();
    self.commonViewModel.start_searching_visible();
    // self.searchCriteriaViewModel.start_searching_visible();     
}

var test = new appViewModel();
ko.applyBindings(test);

我建议完成一些 JavaScript (OOP) course/tutorial。