2014-10-08 101 views
0

我试图根据控制器属性中某个元素的存在来获取隐藏的元素(设置类为display: hidden;)。我在视图中还有另外两个计算属性,一个是rowNumber,另一个是ColumnNumber。这两个属性按预期工作,但是当我将代码添加到hiddenClass计算属性中时,代码会中断并声明“在渲染元素之前,元素被添加到DOM之前,您确实导致了视图重新渲染”。Ember隐藏元素的计算属性

对于计算性能的代码是:

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('[email protected]') 

我知道,如果我删除行宣布var r这并不如预期返回真/假,但是不会引发任何异常。当满足依赖于rowNumber和columnNumber的条件时,如何获取要隐藏的元素?

+3

你的模板是什么样的? – Kingpin2k 2014-10-08 02:25:24

+0

[在使用'parseInt'时总是使用基数](http://www.michaelgaigg.com/blog/2008/10/07/the-importance-of-the-javascript-parseint-radix/)。 – 2014-10-08 07:54:39

+0

' 上午8:30 {{#each在model.arr一个}} {{视图 “可投放细胞”}} {{/每}} ' 是对一个指视图,视图模板是: '{{的#if view.objectExample}} {{拖动对象-示例objectExample =图。 objectExample isPlaced = true}} {{/ if}}' – Ian 2014-10-08 19:12:39

回答

0

问题竟然是该行:

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

get对计算性能其中有jQuery代码在其中,因为之前的元素已经被插入到jQuery代码不应该运行DOM我得到了关于重新渲染的错误。我可以通过重写didInsertElement方法来解决这个问题,以推迟对jQuery的任何评估,直到元素被附加到DOM之后。