Knockout.js “的价值是什么?”;这";在;点击";KnockoutJS中的处理程序?

Knockout.js “的价值是什么?”;这";在;点击";KnockoutJS中的处理程序?,knockout.js,Knockout.js,考虑以下示例: HTML: 请澄清以下几点: 为什么allDone中的this的值不是job?不是通过$parent调用全部完成吗作业是谁 是否有方法在单击时调用allDone,使此的值为作业 此和数据的值似乎相似,但并不完全相同: this->字符串{0:S',1:l',2:e',3:e',4:p',长度:5} 数据->睡眠 有什么区别 此在allDone功能的范围内运行,因此它不会引用作业allDone是通过$parent调用的,在本例中是作业,但这是在数据绑定语法中-这并不意味着Javas

考虑以下示例:

HTML:

请澄清以下几点:

  • 为什么
    allDone
    中的
    this
    的值不是
    job
    ?不是通过
    $parent
    调用
    全部完成
    作业是谁
  • 是否有方法在单击时调用
    allDone
    ,使
    的值为
    作业
  • 数据
    的值似乎相似,但并不完全相同:

    this->字符串{0:S',1:l',2:e',3:e',4:p',长度:5}

    数据->睡眠

    有什么区别

  • allDone
    功能的范围内运行,因此它不会引用
    作业
    allDone
    是通过
    $parent
    调用的,在本例中是
    作业
    ,但这是在数据绑定语法中-这并不意味着Javascript中的
    将引用
    作业

  • 是的,您可以使用将作业的
    this
    的值设置为另一个变量。通常的方法是使用
    var self=this
    。然后,您可以通过子函数范围内的
    self
    引用父对象(
    job
    )。看

  • 您原来的
    将简单字符串视为
    新对象(数据)
    。 使用原始代码,
    新对象(数据)
    -->
    字符串{0:S',1:l',2:e',3:e',4:p',长度:5}

    有关更多详细信息,请参阅。另一个可供参考的帖子是

  • <div data-bind="with: job">
      <div data-bind="foreach: tasks">
        <div>
          <span data-bind="text: $data"></span>
          <span data-bind="click: $parent.allDone">(Done)</span>
        </div>
      </div>
    </div>
    
    ko.applyBindings(function() {
      this.job = {
        tasks: ['Buy milk', 'Sleep', 'Work', 'Praise'],
        allDone: function(data) {
          console.log(this);
          console.log(data);
        }
      };
    });
    
    var job = function () {
        var self = this;
    
        this.tasks = ['Buy milk', 'Sleep', 'Work', 'Praise'];
        this.allDone = function (data) {
            console.log(self); // refers to the parent job now
            console.log(data); // refers to the current item in the data-bound array
        };
    };
    
    ko.applyBindings(new job());