2014-10-02 102 views
9

我想獲得Ember生成的元素ID。如何在控制器中獲取Emberjs生成的元素ID

{{#each}} 
<div> 
<h1>{{MyComponent}}</h1> 
</div> 
{{/each}} 

這使得類似:

<div id="ember180" class="ember-view"> 
<h1>My Component here</h1> 
</div> 

我需要一個控制器中的每個div元素的ID。如果我必須使用自定義ID,那麼我如何使用ember視圖創建自定義ID。

我該如何識別每個div元素的id在控制器內?

回答

13

我不知道你的意思到底是什麼,但我可以回答:

我怎樣才能通過其內部控制器ID識別每個div元素?

Working Example查看console.log以查看元素ID,然後使用Google Chrome或Firebug檢查組件元素以查看該ID是否相同。

App.ItemOneComponent = Ember.Component.extend({ 
    didInsertElement: function(){ 
    console.log('element id: ' + this.elementId); 
    } 
}); 

this組件裏面的組件,並且elementId得到div的id(或不同的標籤,如果你使用tagName組件內)。

如果要使用JQuery選擇組件,請在組件內部使用:this.$()

現在,這裏是我不知道你需要什麼,所以我要拋出一些建議。如果您需要知道控制器中每個組件的ID,我建議將位於控制器上的陣列傳遞給組件。在您的didInsertElement中,將elementIdjQuery對象添加到陣列。 Here is what I mean

App.IndexController = Ember.ArrayController.extend({ 
    componentIds: [] 
}); 

App.ItemOneComponent = Ember.Component.extend({ 
    didInsertElement: function(){ 
    this.get('array').pushObject(this.elementId); 
    } 
}); 

而且您的組件通過在屬性:{{item-one array=controller.componentIds}}

您還可以通過一個動作組件發送的ID或jQuery物體this.sendAction('actionName', componentId),並有一個參數控制器上定義的動作(即該COMPONENTID或jQuery對象。

3

您也可以應對emberId之前它被插入到HTML。

App.ItemOneComponent = Ember.Component.extend({ 
    willInsertElement: function(){ 
     var emberId = this.get('elementId'); 
    } 
}); 
0

您可以使用elementId property爲您的組件創建自定義ID。

您可以通過它綁定到組件模板,像這樣

{{my-component elementId="your-id-name"}} 

或組件文件創建ID

export default Ember.Component.extend({ 
    elementId: 'your-id-name' 
});