我的DOM没有更新,但是我的dataModel没有

时间:2014-08-25 07:47:34

标签: javascript knockout.js

当我调用“点击”功能时,我的DOM不会更新。 它确实更新了数据模型。当我发出警报();在Click函数中,我可以看到正确的值。

HTML:

<div data-bind='foreach: Areas'>
    <table>
      <tbody data-bind="foreach: Categories">
        <tr>
          <td>
            <div data-bind='click: Click'>
              <span data-bind="text: name"></span>
            </div>
            <div data-bind='visible: visible'>
              <div data-bind="foreach: products">
                <div data-bind="text: text1"></div>
              </div>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

JavaScript的:

Click = function (categorie) {
    //alert(toggleContentBool(Categorie.visible));
    Categorie.visible = toggleContentBool(Categorie.visible);
}

function toggleContentBool(switcher) {
    if (switcher) {
        return false;
    } else {
        return true;
    }
}

function TouchArea(jsonObject) {
    var self = this;
    self.productCategories = ko.observableArray(jsonObject.Categories);
}

function Product(text1, text2, text3, text4) {
    var self = this;
    self.text1 = text1;
};

function Categorie(name ) {
    var self = this;
    self.name = ko.observable(name);
    self.visible = ko.observable(true);
    self.products = ko.observableArray([]);
}

function dataLoader() {
    this.jsonTouchArea = '{"Categories":[{"name":"11111","visible":true,"products":[{"text1":"text"},{"text1":"text"}]},{"name":"22222","visible":true,"products":[{"text1":"text"},{"text1":"text"}]}]}';
    return JSON.parse(this.jsonTouchArea);
}

同样重要的是:Categories数组加载了一个json对象。我怀疑它必须对此做些什么。

1 个答案:

答案 0 :(得分:1)

不要替换你的observable,改变它的状态:

Categorie.visible(toggleContentBool(Categorie.visible()));

您的代码正在用布尔值替换observable(并且总是将其切换为false,因为您将函数引用传递给toggleContentBool,并且函数引用是真实的。)

请记住,observable是函数