在一个物体内击倒可观察物

时间:2016-04-20 20:13:07

标签: javascript jquery knockout.js

我会尽力解释这个问题。我在该对象中有一个名为BaseForm的对象,我有函数和knockout observables。我有一个名为Initialize的函数,其中有一个对象,里面有ko observables。其中一个可观察对象称为FormVisible,并初始化为true(FormVisible: ko.observable(true))。我还有一个名为OnClickRow的函数。在此函数中,它将FormVisible从true更改为false。我多次实例化BaseForm。当我调用OnClickRow时,它只会影响实例化的最后一个对象。为什么会这样?我该如何解决?

这是我的代码:

function BaseForm() {
  var that = this;
  BaseForm.prototype.Initialize = function(model) {
    this.model = model;
    this.FormVM = {
      FormVisible: ko.observable(true)
    }
  }

  BaseForm.prototype.OnClickRow = function() {
    that.FormVM.FormVisible(false);
  }
}

this.base1 = new BaseForm();
this.base1.Initialize("new");

this.base2 = new BaseForm();
this.base2.Initialize("old");

this.base3 = new BaseForm();
this.base3.Initialize("other");

this.base1.OnClickRow();

这是jsfiddle

2 个答案:

答案 0 :(得分:0)

我实际上已经弄清楚了。这是一个非常简单的修复方法。我将this.FormVM更改为that.FormVM,并在OnClickRow内将that.FormVM.FormVisible(false);更改为this.FormVM.FormVisible(false)。我仍然不能确定为什么这种方式有效,为什么另一方没有。所以,如果有人有解释,这将是伟大的。谢谢!

这里有更新的fiddle

答案 1 :(得分:0)

您需要将原型配置移到构造函数之外,并更改“#”;到这个':

<div>
  1. 原型继承链在&#39; new&#39;或Object.create()。因此,您不应在构造函数中声明原型方法,因为还不能保证原型链已初始化。

  2. 将这些方法移到构造函数之外意味着&#39;将是未定义的并使用&#39;这个&#39;因此,指的是所需的对象。

  3. 我建议您查看Mozilla Javascript文档,以增强您对自定义对象的了解。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Custom_objects