我们遇到了同样的问题,即将一个相当大的基于 jquery 的全局管理前端变成可嵌套的无冲突组件 - 我们的合作伙伴需要大量的培训工作 - 所以 riotjs 对我们来说是理想的。
我们同意下面的解决方案(另请参阅 Michael Rambeau 的回答)并且到目前为止对此非常满意。
通过一个 mixin,我们给所有的 riot 组件标签这个函数:
var ComponentTagsMixin = {
init: function () {
//<other stuff needed in all tags>
// jquery local to the vDom of this instance:
$: function(selector) {
// you could fail here if (!this.isMounted)
return $(this.root.querySelector(selector))
}
}
```
因此,在标签内,您只需$
变成this.$
. 例如,jquery 可嵌套:
$('#nestable').nestable(....)
$('.dd').nestable('expandAll');
进入
this.$('#nestable').nestable(....)
this.$('.dd').nestable('expandAll');
现在这允许在同一个页面中拥有许多这些组件,而不会发生冲突以及本地命名空间和数据。
正如已经指出的,这只能在安装标签后访问,所以在一个this.on('mount'...)
块中运行你的东西。
这与旧的 jquery 库一起工作得非常好,因为它们通常允许用户重新定义他们的 Dom 选择器以在页面内实现双重运行能力。