javascript - knockout 多个 View 模型 - 未定义

标签 javascript knockout.js frontend

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

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 未定义错误。为什么我会得到这个?尽管我已经在上面的语句中初始化了,为什么我无法访问该变量?

最佳答案

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

但是您遇到了很多其他错误 - 没有将 start_searching_visible 附加到 this/self 并且无法从实例访问它,从错误的 View 模型调用 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) 类(class)/教程。

关于javascript - knockout 多个 View 模型 - 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32757753/

相关文章:

javascript - react JS : setState is late on last input

knockout.js - 在 knockoutjs 中声明 View 模型

javascript - Backbone.js 与 Knockout.js

css - 页面滚动?也许 z-index?

javascript - 获取用户操作系统和版本号

javascript - 如何检查多维数组是否具有特定数组?

c# - 尝试解析序列化 JSON 字符串时处理 MongoDB 的 ISODate()

database - 如何在 Typo3 6.1.5 中使用 PHP 在我的扩展中从 tt_content 呈现内容对象

cors - Svelte API 代理 cors

javascript - 将参数传递给实际上是组件的 Prop ?