Невозможно получить наблюдаемый Riot.js для передачи параметров через обратный вызов

Моя наблюдаемая Riot.js работает следующим образом.

Внутри моего тега "global-header" обновляется riot.store, наблюдаемый в глобальной области действия riot (пользователь вводит новую высоту в поле ввода), а затем наблюдаемые триггеры "update_dims":

save_height() {
  riot.store.cardHeight = this.refs.input_card_height.value
  riot.store.trigger('update_dims')
}

Внутри моего "карточного" тега riot.store прослушивает update_dims и успешно обновляет {myCardHeight} в интерфейсе.

// function updates the card height
update_cardHeight () {
  this.myCardHeight = riot.store.cardHeight
  this.update()
}
// observable runs when triggered and calls above function 'update_cardHeight'
riot.store.on('update_dims',this.update_cardDimensions)

Однако, если я попытаюсь передать параметры напрямую из riot.store.trigger:

save_height() {
  riot.store.cardHeight = this.refs.input_card_height.value
  riot.store.trigger('update_dims','450')
}

Наблюдаемое ниже не обновляет интерфейс, хотя переменная me.myCardHeight была обновлена ​​с новым параметром высоты:

me = this
riot.store.on('update_dims', function (height) {
  me.myCardHeight = height
  console.log(me.myCardHeight)
  me.update()
})

Как правильно это сделать?

1 ответ

Пока в вашем магазине наблюдаются массовые беспорядки, это должно работать:

riot.store = riot.observable();

var me = this
riot.store.on('update_dims', function (height) {
  me.myCardHeight = height;
  console.log(me.myCardHeight);
  me.update();
});

riot.store.trigger('update_dims', 450);

Если вы очень заинтересованы в сохранении его в объекте, я бы предпочел создать общий магазин со своими собственными свойствами:

var store = {
  observable: riot.observable(),
  height: 25 // default
}

riot.mount('myCard', {store: store})

Тогда внутри тега myCard:

var me = this
me.myCardHeight = opts.store.height;

me.opts.store.on('update_dims', function (height) {
  me.opts.store.height = height;
  me.myCardHeight
  console.log(me.myCardHeight);
  me.update();
});

Теперь, когда вы вызываете это, вы переходите в новую общую высоту:

this.opts.trigger('update_dims', 450);

Кроме того, проверьте RiotControl, который может с этим типом архитектуры.

Надеюсь это поможет!

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