Правильный способ получения значения с 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() был вызван), тогда нет необходимости связывать какие-либо дополнительные аргументы.

Надеюсь это ответит на твой вопрос.

Другие вопросы по тегам