15

ここにいる誰かが、特に jQuery と比較して、また一般的にライブラリが提供すべきだと考えているものと比較して、 RightJSライブラリを使用することの浮き沈みについての洞察を提供できるかどうか疑問に思います。

私が探しているのは、機能間の比較ではなく、一般的な日常の使用感です。

次のようなもの:

  • 使用感は自然ですか、それとも苦戦のように感じますか?
  • API はわかりやすい方法で表現されていますか? それとも、3 週間前に書いたコードが何を意味するのか疑問に思っていますか?
  • jQuery の機能 (または一般的な機能) があればいいのにと思いますか? 逆に、他のライブラリにはない特定の機能を楽しんでいますか?
  • あなたがRightJSを優れている/劣っていると考える一般的な哲学的考慮事項。

次のようなものではありません:

  • マインドシェア/マーケットシェア/プラグイン/CDN/考慮事項 (勝者は明らかです)
  • なぜあなたは気にするのですか...
  • jQuery は x、y、z を行いますが、RightJS は行いません。日常の使用にどのように影響するかについての洞察は提供されません (x、y、z を不要にする哲学的な理由がある可能性があります)。
4

4 に答える 4

14

ドキュメント、コード サンプル、および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)

もう 1 つの優れた機能は、宣言構文のみを使用してウィジェットを初期化する統一された方法です。

<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);
});
于 2010-08-29T21:00:49.473 に答える
10

こんにちは、RightJS の作者である Nikolay がここにいます。

Anurag のおかげで、彼は RightJS について非常によく説明してくれました。ただし、いくつかのメモがあります。

あなたが説明したように、実際にはすでに String#on と呼び出しを名前で混在させることができます

"div.boo".on('click', 'toggleClass', 'marked');

次に、RC2 が明日リリースされる RightJS2 では、次のようなことができるようになります。

"div.boo".onClick('toggleClass');
"div.boo".observes('click'); // true
"div.boo".stopObserving('click');

また、そのように、カスタムイベントをそれらと一緒に使用することもできます

"div.boo".on('something', 'addClass', 'something-happened');

RightJS2 バブルのカスタム イベントには、ターゲットと必要なものがすべて含まれています。

次に、dom ラッパーと についてCalendar、はい、要素とウィジェットは dom-wrappers の同じ階層にあり、そのようにそれらを放り投げることができます

$(document.body).insert(new Calednar(...));

また、生の dom-object への直接アクセスを使用して、dom レベルでそれらを操作することもできます。

var calendar = new Calendar();
document.body.appendChild(calendar._);

ところで:パトリック。万が一 Rails を使用している場合は、right-rails プラグインも確認してください。JavaScript と Rails の統合には、非常に優れた機能が数多くあります。

次に、RightJS を使用したときの本当の感覚について尋ねれば、それは状況によると思います。RightJS は、以前はクラスやオブジェクトを扱っていたサーバー側の人々のために構築されました。簡単な方法で簡単な問題を解決するための迅速で機敏な開発のためのものがかなりありますが、それを最大限に活用するには、オブジェクトで考える必要があります。たまたま Prototype や Ruby の経験があれば、ほとんどのことはよく知っているはずです。私はできる限り多くのメソッド名を再利用しようとしました。

jQuery しか知らない人には、最初は少し奇妙に見えるかもしれませんが、jQuery から喜んで移行した人を何人か見かけました。だからきっと大丈夫。

コードの読みやすさに関しては、私はそれが絶対にお尻を蹴ります。読みやすさは、RightJS 開発における主要な懸念事項の 1 つでした。ほとんどのコードは、平易な英語と同じように読むことができます。

"div.zing".on('click', 'toggleClass', 'marked');
$('my-element').update('with some text').highlight();
$$('li').each('onClick', 'toggleClass', 'marked');

そしてそうです。まだhttp://rightjs.org/philosophyを持っていない場合は、このページをチェックしてください

これはそれについてです。他に質問があればお尋ねください。

于 2010-08-30T16:12:17.700 に答える
5

私は RightJS の変換者です。私はその哲学に感銘を受けました。彼は、DOM 要素は単なるデータであり、jQuery はそのアイデンティティ全体を DOM に基づいているように見えることを認めているようです。

私は日常業務で 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>

配列:

var test = [{"data-id":"one"},{"data-id":"two"},{"data-id":"three"}];

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";
});

配列のフィルタリング:

//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";
});

RightJS では、.range() や、'FP' または 'OOP' スタイルで書くオプションなど、アンダースコアが持ついくつかの追加機能を確認したいので、RightJS を排他的に使用できます。私は貢献したほうがいいと思います:)

そうは言っても、私が理解しているように、最近の jQuery の大きな焦点はモバイル互換性です。それが大きな懸念事項である場合でも、jQuery を使用するのが最善かもしれません。

于 2010-09-19T20:33:50.527 に答える
0

これは、prototypeJSから自然な方法で変更するための最良のオプションだと思います。かなり似ています。

@NikolayあなたはprototypeJSユーザーでしたか?

于 2011-12-01T16:22:07.703 に答える