Правильный способ получения значения с Marko.js
Я хочу, чтобы компонент Marko.js генерировал событие вместе со значением, затем я хочу, чтобы содержащий компонент прослушивал событие и получал доступ к значению.
У меня есть простой компонент кнопки, который выглядит следующим образом:
class {
doSomething() {
this.emit('buttonClicked', {someValue:'10'});
}
}
<button.example-button on-click('doSomething')>Click me!</button>
Содержащий компонент выглядит следующим образом...
class {
onButtonClicked(data){
console.log("I heard event:" + data.someValue);
}
}
<div class="button-manager">
<my-button on-buttonClicked('onButtonClicked') />
</div>
Это работает и правильно регистрирует событие со значением. Однако я немного запутался, так как ожидал, что синтаксис в контейнере будет ссылаться на переданные аргументы в слушателе событий... вот так...
<div class="button-manager">
<my-button on-buttonClicked('onButtonClicked', data) />
</div>
Однако это затем отслеживает пустой объект. Если в качестве аргумента указать строку, эта строка записывается в журнал и перезаписывает исходный аргумент данных, передаваемый эмиттером.
Это предполагаемое поведение?
1 ответ
Учитывая следующее и продолжая ваш пример:
class {
onButtonClicked(foo, bar, eventArg){
console.log('foo:', foo);
console.log('bar:', bar);
console.log('eventArg:', eventArg);
}
}
$ var foo = 'foo';
$ var bar = 'bar';
<div class="button-manager">
<my-button on-buttonClicked('onButtonClicked', foo, bar) />
</div>
Выход будет следующим на buttonClicked
испускается:
foo: foo
bar: bar
eventArg: { someValue: 10 }
Дополнительные аргументы, передаваемые после имени метода для обработчика событий, будут переданы методу обработчика событий в начале аргументов. Смотрите: http://markojs.com/docs/components/
Примечание: это должно было отразить поведение Function.prototype.bind
Если не было дополнительных данных, которые вы хотели бы передать в свой метод обработчика событий (данные, которые не были предоставлены, когда this.emit()
был вызван), тогда нет необходимости связывать какие-либо дополнительные аргументы.
Надеюсь это ответит на твой вопрос.