Javascript RiotJS+;RiotControl如何为一个RiotStore确定事件范围
使用两个不同的RiotControl存储在两个相似的Riot组件上确定事件范围的最佳方法是什么 现在,无论按下哪个按钮,操作都应用于两个标记,因为控件存储是全局的。我正试图找出哪种方法是最好的方法,可以为每家商店定义一个标签 我的实际用例将有多个嵌套标记,因此传递存储可能并不理想 我在以下网站上树立了一个榜样: 我的标签:Javascript RiotJS+;RiotControl如何为一个RiotStore确定事件范围,javascript,riot.js,Javascript,Riot.js,使用两个不同的RiotControl存储在两个相似的Riot组件上确定事件范围的最佳方法是什么 现在,无论按下哪个按钮,操作都应用于两个标记,因为控件存储是全局的。我正试图找出哪种方法是最好的方法,可以为每家商店定义一个标签 我的实际用例将有多个嵌套标记,因此传递存储可能并不理想 我在以下网站上树立了一个榜样: 我的标签: <script type="riot/tag"> <play> <button onclick={ toggle }>{op
<script type="riot/tag">
<play>
<button onclick={ toggle }>{opts.name}</button>
<p name="status">unclicked</p>
var self = this
RiotControl.on('play', function() {
self.status.innerText = "clicked"
})
toggle(e) {
RiotControl.trigger('play_toggle')
}
</play>
</script>
到目前为止,我提出的最优雅的解决方案是创建一个全局Mixin,它根据根元素上的属性或其id为所有控件定义一个作用域
var ScopeMixin = {
// init method is a special one which can initialize
// the mixin when it's loaded to the tag and is not
// accessible from the tag its mixed in
init: function() {
this.scope = this.getScope();
},
getScope: function() {
var root = this
while (root.parent) {
root = root.parent
}
return root.opts.scope || root._riot_id
}
}
这与每个触发器结合在一起,以包含一个范围
toggle(e) {
RiotControl.trigger('play_toggle', { scope: self.scope })
}
我使用的一种方法是
var controlStoreOne=new ButtonControlStore({namespace1})
var controlStoreTwo=新按钮controlstore({namespace2})
存储区被编码以监听名称空间的事件。
self.on(self.namespace+':'+'play_toggle',函数(ack){
自我触发(确认evt,确认,'play')
})
i、 e.当你为他们控制一个事件时,它是RiotControl.trigger({namespace1}:play_toggle',ack)
{
evt:“{my listener}”,
外部数据:{}
}
存储被编码为在传入的事件名称上触发。因此,不要盲目地触发某些硬编码的事件名称。然后,我的商店会对这样的事情做出回应。
触发器(ack.evt,ack,{存储区生成的数据})
toggle(e) {
RiotControl.trigger('play_toggle', { scope: self.scope })
}