2015-06-30 93 views
1

這裏是jsbin http://emberjs.jsbin.com/wumufifasu/edit?html,js,output帶有輸入的地方,可以輸入項目的id,其文本將顯示在附近。 但是有兩個項目具有相同的「id」屬性,因此要顯示正確的文本,可以從底部的列表中選擇它們。手動設置後,計​​算屬性不再觀察到變化

「手動選擇」itemId只更改一次 - 第一次,之後未設置,隨後沒有觸發觀察itemId的「itemText」CP。

奇怪的是,這種影響是通過對「itemText」 CP設定值造成的,當this.setProperties({'itemId': item.id, 'itemText': item.text});被替換爲this.setProperties('itemId', item.id); 爲什麼這麼不發生?

回答

2

一個屬性不能既是一個計算屬性也是一個你設置的屬性。如果您設置什麼是計算屬性,則您設置的值會破壞計算出的屬性定義。該物業成爲一個簡單的價值。你必須決定:你想讓Ember計算房產,還是你想自己設置嗎? (實際上,有一個設置計算屬性的概念,但它需要以特殊的方式編寫計算的屬性定義,如果您對此功能感興趣,請參閱http://guides.emberjs.com/v1.10.0/object-model/computed-properties/#toc_setting-computed-properties)。

問題是,您使用重複的ID - 不是一個好主意。當用戶點擊其中一個項目時,您將項目本身作爲參數傳遞給操作,但是從項目的ID中,由於存在重複的ID,因此在控制器操作中,您不再有任何方法可以找到正確的來自ID的項目。我建議在循環中添加一個index參數,然後將其作爲動作參數傳回。如何在組件中定義items?它重複用作模型的items。您應該將模型傳遞給組件。

請參閱http://emberjs.jsbin.com/likazerune/1/edit?html,js,output

+0

感謝您清除設置CP細微差別。 jsbin代表應用程序的簡化模型,其中沒有模型,並且是以其他方式設計的,但我將在下一個項目中考慮這一點。 – lessless