Компонент возвращает одинаковый идентификатор для элементов одного и того же типа

#ember.js

#ember.js

Вопрос:

Я довольно новичок в Ember и, похоже, не могу понять, что происходит.

У меня есть два входа в моем компоненте

 {{input click=(action "getIdAndValue") type="range" min="0" max="100" value="flow_q1"}}

{{input click=(action "getIdAndValue") type="range" min="0" max="100" value="flow_q2"}}
  

в моем .js случае я пытаюсь получить значение id и для каждого отдельного ввода.

 getIdAndValue: function(value){
    this._super(...arguments);    
    console.log("element id: "   this.$('input').attr("id"));
}
  

Ember генерирует эти два идентификатора
вход 1: id= ember689 ,
вход 2: id = ember690

Когда я нажимаю на любой из них, функция возвращает ember689 . В HTML нет других входных данных. Как я могу получить индивидуальный идентификатор? и значение?

Ответ №1:

Поскольку вы используете действие закрытия ( click=(action 'myActionName') ), вы получите event объект в качестве первого параметра:

 getIdAndValue: function(event) {
  let id = event.target.id;
  let value = event.target.value;
}
  

Также обратите внимание, что если вам не нужна живая привязка, я бы рекомендовал вам использовать обычный HTML <input> вместо {{input}} помощника:

 <input onclick={{action "getIdAndValue"}} type="range" min="0" max="100" value="flow_q1" />
  

Также я не уверен, чего вы хотите достичь value="flow_q1" . Если вы хотите получить доступ к названному свойству flow_q1 , вы должны делать value=flow_q1 это при использовании {{input}} помощника и value={{flow_q1}} при использовании обычного HTML <input> .

Ответ №2:

Ember генерирует идентификатор для каждого компонента, поэтому он всегда будет меняться при добавлении новых компонентов и полей. чтобы получить значение для компонента ввода, вы должны присвоить переменную полю значения, а затем вы можете получить доступ к этой переменной, чтобы получить значение ввода следующим образом:

 {{input type="range" min="0" max="100" value=value1}}

{{input type="range" min="0" max="100" value=value2}} 
  

затем вы можете использовать this.get('value1') в своем компоненте для извлечения значения.

Ответ №3:

Следуйте ответу Lux, это правильный путь.

1.In getIdAndValue , вам не нужно вызывать this._super(…аргументы). Мы будем включать суперзвонок только тогда, когда мы переопределяем встроенные методы ember или вызываем метод родительского объекта.

2.In в вашем примере this.$('input') это возвращает массив с 2 включенными вами элементами. Создал образец twiddle, чтобы объяснить это.

3. Не забывайте, что вы даже можете отправить значение идентификатора input помощнику.

 {{input click=(action "getIdAndValue") type="range" id="startRange" min="0" max="100" value="flow_q1"}}