3

私はウィジェットを構築していますが、OOP のバックグラウンドから来て、関数呼び出しを介してメソッドにアクセスするのは奇妙に思えます。

// create the widget in target_id
myWidget = jQuery('#target_id').superWidget();

// this works and accesses do_something, but it's long and redundant.
// After all, myWidget is already a superWidget
myWidget.data('superWidget').do_something('hello');

// also works, but is awkward
myWidget.superWidget('do_something', 'hello');

// what I want to be able to do:
myWidget.do_something('hello');

_create が呼び出されたときにウィジェット自体を拡張することでこれを行うことができるはずだと思いますが、実際にそれを機能させる方法がわかりません。

出来ますか?どのように?私が避けなければならないのは本当にひどい考えですか?なんで?

ありがとうございました!

4

2 に答える 2

2

この API を提供しない理由は、衝突が発生するためです。ウィジェットが既存の jQuery メソッドと同じ名前のメソッドを提供するとどうなりますか? 同じ要素で複数のウィジェットを初期化するとどうなりますか?

そうは言っても、ウィジェットは、共通の jQuery API を提供するラッパーを備えた純粋な OO です。OO 構文だけを使用したい場合は、使用できます。

var widget = $.ns.superWidget( {}, "#elem" );
widget.doSomething( "hello" );

$.ns.superWidget関数は実際のコンストラクターです。関数として呼び出すとnew、コンストラクターの動作を強制する別の呼び出しが発生します。

ウィジェット インスタンスを直接構築するさまざまな方法をリストしたjQuery UI 1.9 アップグレード ガイドを読むことに興味があるかもしれません。

注: jQuery UI 1.8.x を使用している場合、要素パラメーターはセレクターを受け入れないため、DOM 要素を渡す必要があります。

于 2012-10-26T17:13:21.823 に答える
0

ウィジェット メソッドを呼び出す方法は、サポートされていない jQueryUI ウィジェット ファクトリ インターフェイスです。

http://api.jqueryui.com/jQuery.widget/

于 2012-10-26T15:34:36.127 に答える