5

編集:明確にするために、私はjQueryの素晴らしさに疑問を抱いているわけではありません。私はどこでもそれを使用します。jQueryの機能を利用する通常のjsオブジェクトよりもウィジェットを使用する利点がわかりません。

最近、作業中のアプリでいくつかの jQuery ウィジェットを使用する必要がありましたが、それらが非常に直感的でない/醜いことがわかりました。実際には何の価値ももたらさない慣習がたくさんあるようで、構文はインテリセンスや簡単なリファクタリングに対応していません。

誤解しないでほしいのですが、私は常に jQuery を使用しており、jQuery のない生活は嫌いです。ただ、ウィジェットの慣習に価値を見出せていないだけです。それらは非常に広まっているため、要点を見逃していると思います。手がかりを教えてください。なぜ人々は通常の js オブジェクトの代わりに jQuery ウィジェットを作成するのでしょうか?

単純化しすぎた例:

通常の Javascript オブジェクト:

//instantiate & render
var foo = new MyDomain.MyObject('#mySpecialInput', options)
foo.render();

//assign to property
foo.value = 5;
//call method
foo.multiplyBy(2);
//bind event
foo.change(function(){
    alert('it changed');
}

Jquery ウィジェット:

//instantiate & render
var $foo = $('#mySpecialInput');
$foo.myWidget(options);

//assign to property
$foo.myWidget('option', 'value', 5);
//call method
$foo.myWidget('multiplyBy', 2);
//bind event
$foo.bind('myWidgetChange', function(){
    alert('it changed');
}
4

3 に答える 3

1

Thinking Sites の指摘に加えて、jQuery ウィジェットを使用すると、他の OO のような機能も提供されます (プレーンな js でサポートするために必要なインフラストラクチャの構築に投資する必要はありません)

- 拡張性
- インプレース継承 - それ自体からの拡張が可能です。これにより、モジュラーで保守性の高いコードが可能になります
- コードの可読性を向上させるパブリック メソッドとプライベート メソッドの概念、および最良の部分は、jQuery オブジェクトを返すためチェーンを維持することです
- ウィジェットのライフサイクルを管理するための定義済みのメソッドが多数あります: 作成、初期化と破棄

jQuery ウィジェット フレームワークは、オブジェクト指向のような機能を模倣するツールとして扱うことができます。

一貫した API を使用して、複雑でステートフルなプラグインを構築するための柔軟な基盤を提供します。これは、jQuery UI の一部であるプラグインだけでなく、共通インフラストラクチャを再発明することなくオブジェクト指向コンポーネントを作成したい開発者による一般的な使用のために設計されています。-- http://wiki.jqueryui.com/w/page/12138135/Widget%20factory

于 2013-03-21T19:30:33.063 に答える
1

最大の利点は、jQuery ウィジェットがないと保守が非常に困難な構造をアプリにもたらすのに役立つことです。もちろん、.bind()非常に役立つ などの便利なイベントも多数用意されています。少しグーグルで調べた後、 jQuery ウィジェットに関するこの記事を見つけました。この記事では、jQuery ウィジェットの利点についてもう少し詳しく説明しています。

個人的には、スクリプトを手動で (さらに) 構成することを好みますが、そうしたくない場合は、jQuery ウィジェットが役立ちます。


jQuery ウィジェットが構造を追加する方法を詳述した関連する引用:

...ウィジェット構造の外で維持するのが非常に難しいレベルのコード編成を提供します。これにより、コードが命令型 (「これを実行し、次にそれを実行し、別の操作を実行してクリックする」) から宣言型 (「expando のように動作する」) に変わります。これにより、アプリの外側のレイヤーを乱雑にしたり変更したりすることなく、「expando thing」が意味するものを自由に定義できます。数百行に及ぶ $(document).ready() ブロックはもう必要ありません。

于 2012-05-11T17:35:33.227 に答える
0
  1. コードの編成と構造化
  2. 名前空間
  3. 継承
  4. 適切なスコープとクロージャ
  5. 開発者間の可読性と共通のアーキテクチャ
  6. 一般的なアイテムにアクセスするための事前定義されたプロパティ
于 2012-05-11T19:05:32.227 に答える