2012-06-12 26 views
3

的elementId我有使用以下模板呈現一個列表元素的視圖:無法設置一個視圖到列表內容ID

{{#each item in controller}} 
     {{view App.ItemView}}   
    {{/each}} 

我需要每個項目的ID是對應ItemView控件的ID。這是我的第一次嘗試,但它不起作用:

App.ItemView = Ember.View.extend({ 
    elementId: Ember.computed(function(){ 
     return this.getPath('item.id'); 
    }), 
    templateName: 'item' 
}); 

我做錯了什麼?

你可以找到的jsfiddle說明這裏http://jsfiddle.net/jrabary/vk4Ze/

回答

2

我的問題,目前認爲需要計算elementId財產,item尚未設置,所以這裏的問題開始......

如果你想在物品可用時設置ID,你將不得不允許Ember檢索要改變的DOM元素......這意味着Ember必須設置元素的ID! 換句話說,就像今天這是不可能的,因爲Ember使用元素id來保持DOM擁有/控制元素的引用。

儘管如此,視圖還是顯示了綁定到它的項目,因此您可以稍後檢索該項目。你究竟需要什麼?

編輯

下面是一個簡單的定製元素的類根據項目的編號:http://jsfiddle.net/MikeAski/ZAHxm/

+0

我需要從外部測試我的應用程序。爲此,我正在使用黃瓜和水豚。在那裏,我想用find(:xpath,「// div [@ id ='elementId']」)來測試一個元素的點擊,這就是爲什麼我需要元素ID。但我可以改變我這樣做的方式。 – jrabary

+0

我有一個例子,根據項目的id設置一個類@ http://jsfiddle.net/MikeAski/ZAHxm/ –

+0

只需一個簡短的提示,不要設置'elementId'。 Ember在每個視圖上設置屬性。你應該改名字爲'contentId'。 –

2

以上的答案幫助了我。最後,我想將視圖的包裝標籤的ID屬性專門設置爲模型的ID。我發現你可以通過this.get('context'),get('anyProperty')和DOM元素本身(作爲jQuery對象)使用視圖的didInsertElement鉤子來實現這一目標。 ()。似乎囉嗦,但看不到更清潔的方式。

App.MyView = Ember.View.extend({ 
    templateName: 'MyTemplate', 
    didInsertElement: function(e){ 
     this.$().attr('id', this.get('context').get('id')); 
    } 
}); 
+1

這會干擾Ember的內部簿記嗎?我認爲它設置了它所做的'id'屬性是有原因的。 – Bluu

+0

它有副作用嗎? – ykaragol