基于文档、代码示例以及RightJS 2已经在工作的内容,我印象非常深刻。
@Patrick - 感谢您指出 RightJS 中的Call By Name功能,这对于从整个页面中删除大多数匿名函数似乎非常有用。对于那些不熟悉它的人来说,这个想法是将方法名称和参数指定为参数,而不是创建匿名回调。例如,如果我们试图从数组中过滤所有以“hello”开头的单词和短语,
var words = ['stack', 'hello world', 'overflow', 'hello there'];
在数组上使用 filter 方法,我们会这样写:
words.filter(function(word) {
return word.indexOf('hello') === 0;
});
我们可以在 RightJS 中使用 Call By Name 编写相同的内容,
words.filter('startsWith', 'hello');
很甜吧?
我也很喜欢能够直接使用字符串作为选择器的想法。虽然目前 RightJS 仅用于事件委托,但我希望能够在$
大多数情况下完全摆脱该函数并直接调用字符串上的方法。例如,要监听页面上任何段落的所有点击,请编写:
'p'.on('click', function() {
this.addClass('clicked');
});
或者也许将其与按名称调用相结合,
'p'.on('click', 'addClass', 'clicked');
RightJS 2 中令我兴奋的事情是能够将小部件用作本机元素。
var calendar = new Calendar();
calendar instanceof Calendar; // true
calendar instanceof Element; // true
感谢@patrick 和@Nikolay 在这里澄清了我的假设。小部件将包装本机 DOM 元素,该元素可作为_
对象的属性使用。
document.body.appendChild(calendar._);
或者使用框架提供的方法。
calendar.insertTo(document.body)
另一个不错的功能是使用声明性语法来初始化小部件的统一方法:
<input data-calendar="{format: 'US', hideOnClick: true}" />
而不是自己创建对象然后将其添加到页面:
var calendar = new Calendar({
format: 'US',
hideOnClick: true
});
calendar.insertTo(document.body);
我从 John Resig 的题为JavaScript 库概述的演示文稿中截取了幻灯片,并将 jQuery 的代码示例与 RightJS 进行了比较。这些示例主要比较了两个框架的基本语法,它们的相似之处多于不同之处,尽管 RightJS 的使用似乎更灵活。
DOM 遍历
jQuery
$('div > p:nth-child(odd)')
RightJS
$$('div > p:nth-child(odd)')
DOM 修改
jQuery
$('#list').append('<li>An Item</li>')
RightJS
$('list').insert('<li>An Item</li>')
活动
jQuery
$('div').click(function() {
alert('div clicked')'
});
RightJS
$$('div').onClick(function() {
alert('div clicked');
});
AJAX
jQuery
$.get('test.html', function(html) {
$('#results').html(html);
});
或者
$('#results').load('test.html');
RightJS
Xhr.load('test.html', {
onSuccess: function(request) {
$('#results').html(request.text);
}
}).send();
或者
$('results').load('test.html');
动画
jQuery
$('#menu').animate({ opacity: 1 }, 600);
RightJS
$('menu').morph({ opacity: 1 }, { duration: 600 });
数组遍历
jQuery
$.each(myArray, function(index, element) {
console.log(element);
});
RightJS
myArray.each(function(element) {
console.log(element);
});