Как получить Emberjs созданный элемент ID в контроллер

Я хотел бы получить идентификатор, сгенерированный Ember элемента.

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

, которые делают что-то вроде:

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

мне нужно получить идентификатор каждого элемента div внутри контроллера. Если я должен использовать пользовательский идентификатор, как я могу создать пользовательский идентификатор с помощью ember view.

и как я могу идентифицировать каждый элемент div по его ID контроллера внутри?

3 ответов


я не совсем понимаю, что вы имеете в виду, но я могу ответить:

и как я могу идентифицировать каждый элемент div по его ID контроллера внутри?

Пример Работающего посмотрите на консоль.войдите, чтобы увидеть идентификатор элемента, а затем использовать Google Chrome или Firebug для проверки элемента компонента, чтобы увидеть, что идентификатор тот же.

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

this внутри компонента находится компонент, а elementId получает id div (или другой тег, если вы используете tagName внутри компонента).

если вы хотите выбрать компонент с JQuery, используйте:this.$() внутри компонента.

теперь вот где я не знаю, что вам нужно, поэтому я собираюсь выбросить несколько предложений. Если вам нужно знать идентификаторы каждого компонента от контроллера, я бы рекомендовал передать массив, сидящий на контроллере, компоненту. В didInsertElement добавить elementId или jQuery объект матрица.вот что я имею в виду

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

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

и ваш компонент передает в собственность: {{item-one array=controller.componentIds}}

вы также можете отправить код компонента или jQuery объект через действие с this.sendAction('actionName', componentId) и имеют действие, определенное на вашем контроллере, которое принимает один параметр (т. е. componentId или объект jQuery.


вы также можете иметь дело с emberId, прежде чем он будет вставлен в html.

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

Вы можете создать пользовательский идентификатор для компонента с помощью свойство elementId.

вы можете создать идентификатор, привязав его к шаблону компонента, например

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

или в файле компонента

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