use*_*716 15 javascript comparison jquery rightjs
想知道这里是否有人可以提供任何关于使用RightJS库的起伏的见解,特别是与jQuery相比,并且通常与您认为库应该提供的相比.
我不是在寻找功能比较的功能,而是一般的日常使用感.
像:
不是这样的:
Anu*_*rag 14
基于文档,代码示例以及RightJS 2的工作内容,我印象非常深刻.
@Patrick - 感谢您指出RightJS中的Call By Name功能,这对于从整个页面中删除大多数匿名函数似乎非常有用.对于那些不熟悉它的人,我们的想法是将方法名称和参数指定为参数,而不是创建匿名回调.例如,如果我们尝试过滤所有单词并以从数组开头的"hello"开头,
var words = ['stack', 'hello world', 'overflow', 'hello there'];
Run Code Online (Sandbox Code Playgroud)
在数组上使用filter方法,我们会写:
words.filter(function(word) {
return word.indexOf('hello') === 0;
});
Run Code Online (Sandbox Code Playgroud)
我们可以使用RightJS中的Call By Name来编写相同的东西,
words.filter('startsWith', 'hello');
Run Code Online (Sandbox Code Playgroud)
很甜蜜呃?
我也喜欢能够直接使用字符串作为选择器的想法.虽然RightJS目前仅用于事件委托,但我希望能够完全摆脱$
函数用于大多数目的并直接调用字符串上的方法.例如,要收听页面上任何段落的所有点击,请写入:
'p'.on('click', function() {
this.addClass('clicked');
});
Run Code Online (Sandbox Code Playgroud)
或者可以将其与Call By Name结合使用,
'p'.on('click', 'addClass', 'clicked');
Run Code Online (Sandbox Code Playgroud)
我在RightJS 2中感到兴奋的是能够将小部件用作本机元素.
var calendar = new Calendar();
calendar instanceof Calendar; // true
calendar instanceof Element; // true
Run Code Online (Sandbox Code Playgroud)
感谢@patrick和@Nikolay澄清我的假设.小部件将包装本机DOM元素,该元素可用作_
对象的属性.
document.body.appendChild(calendar._);
Run Code Online (Sandbox Code Playgroud)
或使用框架提供的方法.
calendar.insertTo(document.body)
Run Code Online (Sandbox Code Playgroud)
另一个不错的功能是使用声明性语法初始化窗口小部件的统一方法:
<input data-calendar="{format: 'US', hideOnClick: true}" />
Run Code Online (Sandbox Code Playgroud)
而不是自己创建一个对象,然后将其添加到页面:
var calendar = new Calendar({
format: 'US',
hideOnClick: true
});
calendar.insertTo(document.body);
Run Code Online (Sandbox Code Playgroud)
我从John Resig的题为" JavaScript库概述 "的演示文稿中获取了幻灯片,并将jQuery的代码示例与RightJS进行了比较.这些示例主要比较两个框架的基本语法,这些框架比不同的框架更相似,尽管RightJS的使用似乎更灵活.
jQuery的
$('div > p:nth-child(odd)')
Run Code Online (Sandbox Code Playgroud)
RightJS
$$('div > p:nth-child(odd)')
Run Code Online (Sandbox Code Playgroud)
jQuery的
$('#list').append('<li>An Item</li>')
Run Code Online (Sandbox Code Playgroud)
RightJS
$('list').insert('<li>An Item</li>')
Run Code Online (Sandbox Code Playgroud)
jQuery的
$('div').click(function() {
alert('div clicked')'
});
Run Code Online (Sandbox Code Playgroud)
RightJS
$$('div').onClick(function() {
alert('div clicked');
});
Run Code Online (Sandbox Code Playgroud)
jQuery的
$.get('test.html', function(html) {
$('#results').html(html);
});
Run Code Online (Sandbox Code Playgroud)
要么
$('#results').load('test.html');
Run Code Online (Sandbox Code Playgroud)
RightJS
Xhr.load('test.html', {
onSuccess: function(request) {
$('#results').html(request.text);
}
}).send();
Run Code Online (Sandbox Code Playgroud)
要么
$('results').load('test.html');
Run Code Online (Sandbox Code Playgroud)
jQuery的
$('#menu').animate({ opacity: 1 }, 600);
Run Code Online (Sandbox Code Playgroud)
RightJS
$('menu').morph({ opacity: 1 }, { duration: 600 });
Run Code Online (Sandbox Code Playgroud)
jQuery的
$.each(myArray, function(index, element) {
console.log(element);
});
Run Code Online (Sandbox Code Playgroud)
RightJS
myArray.each(function(element) {
console.log(element);
});
Run Code Online (Sandbox Code Playgroud)
Nik*_*lay 10
嘿伙计们,RightJS的作者Nikolay就在这里.
感谢Anurag,他很好地描述了RightJS.虽然有几个笔记.
您实际上已经可以混合String#on和按名称调用,就像您所描述的那样
"div.boo".on('click', 'toggleClass', 'marked');
Run Code Online (Sandbox Code Playgroud)
然后在RightJS2中,明天你将会发布RC2,你可以做类似的事情
"div.boo".onClick('toggleClass');
"div.boo".observes('click'); // true
"div.boo".stopObserving('click');
Run Code Online (Sandbox Code Playgroud)
您也可以使用任何自定义事件,就像那样
"div.boo".on('something', 'addClass', 'something-happened');
Run Code Online (Sandbox Code Playgroud)
RightJS2泡泡中的自定义事件,具有您需要的目标和一切.
然后关于dom包装器Calendar
,是的元素和小部件将在dom-wrappers的相同层次结构中,你将能够将它们抛到一边,就像那样
$(document.body).insert(new Calednar(...));
Run Code Online (Sandbox Code Playgroud)
你也可以使用直接访问原始dom-object来在dom级别上操作它们,就像那样
var calendar = new Calendar();
document.body.appendChild(calendar._);
Run Code Online (Sandbox Code Playgroud)
顺便说一句:Patrick.如果您有任何机会使用Rails,您还应该查看right-rails插件,JavaScript和Rails集成上有很多非常好的东西.
然后,如果你问与RightJS合作的真实感觉,我会说这取决于.RightJS是为曾经使用类和对象的服务器端人员构建的,有很多东西可以快速灵活地开发,以简单的方式解决简单的问题,但是为了充分利用它,你需要在对象中思考.如果您也碰巧有使用Prototype或Ruby的经验,那么大多数事情都应该非常熟悉,我试图重用尽可能多的方法名称.
如果你所知道的只是jQuery,从一开始有些事情可能看起来有点奇怪,但我看到几个人乐意从jQuery迁移.所以我想你会没事的.
至于代码可读性,imho它绝对踢屁股.可读性是RightJS开发中的主要问题之一,您可以像普通英语一样阅读大部分代码
"div.zing".on('click', 'toggleClass', 'marked');
$('my-element').update('with some text').highlight();
$$('li').each('onClick', 'toggleClass', 'marked');
Run Code Online (Sandbox Code Playgroud)
一个人.如果您还没有http://rightjs.org/philosophy,请查看此页面
这是关于它的.询问您是否还有其他问题.
我是RightJS转换.我对这个哲学印象深刻,他似乎承认DOM元素只是数据,jQuery似乎将其整个身份基于DOM.
我在我的dayjob中使用jQuery,但发现自己需要将它与underscore.js结合使用才能完成很好的函数式编程.在RightJS中,你可以获得很多很好的FP好东西作为本机对象的方法.
这是一个小比较,显示了相同的方法如何在右边的js中的普通数组和dom集合上工作:
一些html:
<ul id="test">
<li data-id="one">one</li>
<li data-id="two">two</li>
<li data-id="three">three</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
数组:
var test = [{"data-id":"one"},{"data-id":"two"},{"data-id":"three"}];
Run Code Online (Sandbox Code Playgroud)
过滤html,非常相似:
//jQuery:
var filtered = $("#test li").filter(function(element) {
return $(element).attr("data-id") == "one";
});
//RightJS
var filtered = $$('#test li').filter(function(element) {
return element.get("data-id") == "one";
});
Run Code Online (Sandbox Code Playgroud)
过滤数组:
//you can't do this with jquery because it is DOM-specific.
//you need something like underscore:
//underscore:
var filtered = _.select(test, function(element) {
return element["data-id"] == "one";
});
//RightJS << uses the same .filter() method as used on the html!
var filtered = test.filter(function(element) {
return element["data-id"] == "one";
});
Run Code Online (Sandbox Code Playgroud)
在RightJS中,我希望看到一些下划线的其他内容,例如.range()和以'FP'或'OOP'样式编写的选项,因此我可以独占使用RightJS.猜猜我更有贡献:)
话虽如此,据我所知,现在jQuery的重点是移动兼容性.如果这是一个主要问题,它仍然可能最好与jQuery一起使用.
归档时间: |
|
查看次数: |
1277 次 |
最近记录: |