因为riot是基于自定义标签【组件】开发的。标签内部的所有属性和方法,都是私有的,而外部要访问标签内容,就显得有些困难重重。
如果愣是要访问标签里的内容,有几种吃力不讨好的方法:
1、window全局变量法
[code]
优点:
非常暴力简单,通过 window.TODO能访问标签内容的所有内容。
缺点:
当页面有多个相同标签时,不适用
2、riot.mount返回值
[code]riot.mount返回的,是个数组,要获取第一个 “todo”标签的内容,需要这样: var todo1 = todo[0];
优点:
有办法区分多个标签
缺点:
与自定义标签放置的顺序要严重的依赖关系。而且通过script的src加载回来的自定义标签,返回值是null。
只有手动调用加载方法,编译之后,才能访问到上下文 :
[code]riot.compile("todo.tag", function(){
/*才能获取到返回的内容*/
var todo = riot.mount("todo")[0];
});riot.observable
上面的,都并不是王道,在Riot中,内置了发布者,我们只需要通过简单的代码,就能创建一个类jQuery的发布者:
[code]var opts = riot.observable({
// some code...
});通过riot.observable生成的发布者,有 on, off, trigger, one等常用方法【熟悉jq的同学,看名字应该知道怎么回事了】。
那opts为例,这里对各个方法简要说明:
[code]// 监听事件
opts.on("event1", function(data1, data2){
// 监听event1事件
// data1和data2是trigger传入的参数
// data1 = 1, data2 = 2
console.log(data1, data2);
});
// 发布一个事件
// 该事件带有 1和2 作为参数
// 上面的on("event1")的回调fn将会执行
opts.trigger("event1", 1, 2);
// 解除event1 的所有监听,第二个参数可选
// 如果有第二个参数[function],则只解绑该函数
opts.off("event1");
// one与on类似,只是one如果执行过一次,就自动解除绑定
opts.one("event1", function(data1){
console.log(data1);
});
opts.trigger("event1", 1, 2);最终的输出,将会是:
[code]1 2 1
Riot推崇我们使用 opts 和 observable 解决内外通讯的问题。看个例子:
[code]
Riot.js 事件监听
点击登录后,效果如下:
phpweb1.0基于php+mysql+smarty开发的企业解决方案,总体感觉简洁快速,适合小型企业的建站方案,也适合初学者学习。 之前发布过phpweb1.0的原始版本,仅提供大家交流和学习,但很多的爱好者提出了一些不足和好评,本不想继续开发1.0,因为2.0已经开发完毕而且构架与1.0完全不同,但是有些使用者喜欢这种简洁和简便,应大家的要求,美化和优化了一些不足之处。后台更加简洁美观。

通过事件监听和发布,能很好的接触内外通讯的问题,同时,也可
以很大程度上,限制某些数据的访问权限。
不过,opts很大程度上,和标签耦合到一起了。
标签需要知道opts将会发布“outside”,并监听;
opts则需要知道标签将会调用它的 login 方法;
如果没有良好的团队规范,这将会是一场灾难。
SO:
无论哪种模式,哪种方法,都有自己的适用场景。用对了,就是画龙点睛,用错了,那是寸步难行。动手前多想想吧
以上就是riot.js学习【八】观察者的内容,更多相关内容请关注PHP中文网(www.php.cn)!









