访问内部功能范围的元素,而不是敲除中的外部

accessing element of inner function scope instead of outer in knockout

本文关键字:外部 功能 内部 范围 元素 访问      更新时间:2023-09-26

下面是我的代码。我的构造函数appVM中有var viewData为null,在activate中我用一些值填充它。现在我必须使用viewData的activate作用域,而不是外部作用域。我的Lis自身变量应该分配给相同的值。

var appVM = function () {        
    this.viewData = null;
    this.subscription = ko.observable();      
    this.activate = function (viewActivationData) {
        var self = this;
        self.viewData = viewActivationData.viewData;
    };
appVM.prototype.list = function () {
    var self = this;
    getEmpLists(self.viewData.empId);
};

您需要搜索关于闭包如何在JavaScript中工作的教程。

以下是解决您问题的几种方法:

第一:(为"this"创建一个闭包)

var appVM = function () {        
    var self = this;
    this.viewData = null;
    this.subscription = ko.observable();      
    this.activate = function (viewActivationData) {
        self.viewData = viewActivationData.viewData;
    };
    appVM.prototype.list = function () {
        getEmpLists(self.viewData.empId);
    };
}

第二:(避免了关闭的需要)

var appVM = function() {
  var viewData = null;
  var subscription = ko.observable();
  var activate = function(viewActivationData) {
    viewData = viewActivationData.viewData;
  };
  var list = function() {
    getEmpLists(viewData.empId);
  };
  return {
    viewData: viewData,
    subscription: subscription,
    activate: activate,
    list: list,
  };
}

这只是两个简单的例子。还有其他方法可以解决这个问题,但这些可能是最简单的。最终,在控制和理解"这个"时,你需要使用几种不同的技术。