我不确定我是否正确理解可观察对象的工作方式以及如何从已安装的标签中获取引用。我有一个组件。在这个组件中,我们有一个组件和一个组件。目的是避免组件之间的耦合。因此,我希望我的搜索组件在搜索完成时触发一个事件(单击按钮)。该事件应被组件捕获,该组件将根据搜索过滤集合数据。
index.html 文件通过以下方式加载标签:
索引.html
riot.mount(".content", "page", null);
页面定义如下:
page.js
<page>
<!-- Search tag controls -->
<search id="searchTag"></search>
<!-- Collection data to display -->
<collection id="collectionTag"></collection>
</page>
组件脚本的简要定义如下:
搜索.js
var self = this;
riot.observable(self);
<!-- This function is called when the user click on the button. -->
self.filtering = function()
{
<!-- We get data from inputs -->
var info = Getting data from inputs;
<!-- Trigger the event hoping that someone will observe it -->
self.trigger("filterEvent", info);
}
如何让组件观察该事件?
对我来说,似乎我应该能够从page.js中的搜索标签和集合标签中获取引用。通过这样做,我可以连接如下事件:
searchComponent = riot.mount('search');
collectionComponent = riot.mount('collection');
searchComponent.on('filterEvent', function()
{
<!-- Trigger function to filter collection data -->
collectionComponent.trigger('filterData');
});
现在我不能让它像那样工作。
在执行时,searchComponent 和 collectionComponent 没有定义。
我还尝试通过使用this.searchTag
而this.collectionTag
不是安装它们来获取这些组件的引用,但是在执行代码时,组件尚未安装,因此我没有得到对它们的引用。
有什么想法让它发挥作用吗?