Это упрощенный пример, но хорошо демонстрирует мою проблему. У меня есть ввод PIN-кода с кнопками для цифр (1, 2, 3, 4). Действие на моих кнопках должно установить свойство pinValue
, которое передается в обернутый компонент pin-input
. Так это то, что мой код выглядит следующим образом:Уведомление EmberPropertyChange() не срабатывает для наблюдателей обернутого компонента
Смотрите пример: http://ember-twiddle.com/38bd66b63e6745f2ea0d
пин-entry.hbs
{{pin-input pinValue=pinValue}}
{{#each numbers as |num|}}
<button {{action "addNumber" num}}>{{num}}</button>
{{/each}}
пин-entry.js
pinValue: null,
numbers: [1, 2, 3, 4],
actions: {
addNumber: function (number) {
this.set('pinValue', number);
this.notifyPropertyChange('pinValue');
}
}
пин-input.hbs
<input type=text value={{value}}>
пин-input.js
value: null,
pinValue: null,
onInsertAddObserver: function() {
// trying to manually subscribe to pinValue here.
// * from stackOverflow answer
var controller = this.get('targetObject');
controller.addObserver('pinValue', this, this.onDataChange)
}.on('didInsertElement'),
onDidChangeInput: function() {
var current = this.$('input').val();
this.set('value', current + this.get('pinValue'));
}.observes('pinValue')
Проблема в том, чтобы при попытке ввода повторяющихся чисел спина к спине (например, 1233 остановится на 123). Я не могу заставить меня изменить свойства, чтобы onDidChangeInput
срабатывал. Метод addObserver
из другого сообщения *.
* Некоторые идеи взяты из здесь, но не помогло мне: EmberJS notifyPropertyChange not making it to observer?
Вам не нужно «notifyPropertyChange» или любой из наблюдателей. – runspired
Вот рабочий принцип: http://ember-twiddle.com/9c1517b37f44635a17c7 – runspired
Единственная проблема заключается в том, что мерцание сбрасывает позицию курсора после обновления значения, вы можете исправить это, используя этот компонент: http: // ember-twiddle .com/2d7246875098d0dbb4a4 – runspired