2014-10-08 179 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之後。