我正在尝试隐藏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的条件时,如何隐藏元素?
答案 0 :(得分:0)
问题原来就是这一行:
var r = cells.filterBy('row',parseInt(this.get('rowNumber'))).findProperty('col',parseInt(this.get('columnNumber')));
在计算属性上使用get
,其中包含jQuery代码,因为在将元素插入DOM之前不应运行jQuery代码我收到了有关重新呈现的错误。我能够通过覆盖didInsertElement方法来解决问题,以推迟对jQuery的任何评估,直到元素被追加到DOM之后。