如何让Emberjs在控制器中生成元素id

Has*_*mud 11 element handlebars.js ember.js

我想得到Ember生成的元素id.

{{#each}}
<div>
 <h1>{{MyComponent}}</h1>
</div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

它呈现如下:

<div id="ember180" class="ember-view">
 <h1>My Component here</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

我需要在控制器中获取每个div元素的id.如果我要使用自定义ID,那么如何使用ember视图创建自定义ID.

如何通过控制器内的id识别每个div元素?

mis*_*nry 17

我不确定你的意思,但我可以回答:

如何通过控制器内的id识别每个div元素?

工作示例查看console.log以查看元素ID,然后使用Google Chrome或Firebug检查组件元素以查看id是否相同.

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

this组件内部是组件,elementId获取iddiv(如果tagName在组件内部使用,则获取不同的标签).

如果要使用JQuery选择组件,请使用:this.$()组件内部.

现在这里我不知道你需要什么,所以我会抛出一些建议.如果您需要知道控制器中每个组件的ID,我建议将控制器中的数组传递给组件.在你的didInsertElement,添加elementIdjQuery对象数组.这就是我的意思

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

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

并且您的组件传递属性: {{item-one array=controller.componentIds}}

您还可以jQuery通过操作发送组件的id或对象,this.sendAction('actionName', componentId)并在控制器上定义一个带有一个参数的操作(即componentId或jQuery对象).