Ember计算隐藏元素的属性

时间:2014-10-08 00:20:45

标签: javascript ember.js

我正在尝试隐藏ember中的元素(使用display: hidden;设置类),具体取决于控制器属性中是否存在某个元素。我在视图中还有另外两个计算属性,一个是rowNumber,另一个是columnNumber。这两个属性按预期工作,但是当我将代码添加到hiddenClass计算属性中时,代码断开并声称“你做的事情导致视图在渲染后重新渲染但在元素添加到DOM之前”。

计算属性的代码是:

hiddenClass: function() {
        var cells = this.get('controller.occupiedCells');
        console.log('onOccupiedChange fired');
        var r = cells.filterBy('row',parseInt(this.get('rowNumber'))).findProperty('col',parseInt(this.get('columnNumber')));
    }.property('controller.occupiedCells.@each')

我知道这不会按预期返回true / false,但是如果我删除声明var r的行,则不会抛出异常。当满足依赖于rowNumber和columnNumber的条件时,如何隐藏元素?

1 个答案:

答案 0 :(得分:0)

问题原来就是这一行:

var r = cells.filterBy('row',parseInt(this.get('rowNumber'))).findProperty('col',parseInt(this.get('columnNumber')));

在计算属性上使用get,其中包含jQuery代码,因为在将元素插入DOM之前不应运行jQuery代码我收到了有关重新呈现的错误。我能够通过覆盖didInsertElement方法来解决问题,以推迟对jQuery的任何评估,直到元素被追加到DOM之后。