2017-02-13 2 views
0

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

Внутри моего «глобального заголовка» теге riot.store наблюдаемого в глобальном масштабе RIOT в обновляется (пользователь вводит новую высоту в поле ввода), а затем наблюдаемые Триггера «update_dims»:

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

В моем теге «card» 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() 
}) 

Каков правильный путь?

ответ

0

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

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, которые могут с этим типом архитектуры.

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

Смежные вопросы