2011-08-12 3 views
1

は、私には、例えば、XUI用のプラグインを作成しました:XUI JSフレームワークプラグインでパブリックメソッドを公開していますか?

xui.extend({ 
    myPlugin : function(){ 

     var options = []; 

     function methodOne(obj){ 

     } 

     function methodTwo(){ 

     } 
    } 
}); 

をそして今、私が呼び出すことができます。

<script type="text/javascript"> 
xui.ready(function(){ 

    // call my plugin on an XUI object 
    x$('element').myPlugin(); 

}); 
</script> 

しかし、私はまた、プラグイン内のメソッドの一部にアクセスできるようにする必要がありますXUI mobiはでもう少し経験を持つ、このような何か(このコードは動作しませんが、私は達成することができるようにしようとしているものを示している)

<script type="text/javascript"> 
xui.ready(function(){ 

    // call my plugin on an XUI object 
    x$('element').myPlugin(); 

    var foo = bar; 

    // call one of my methods? 
    xui.fn.myPlugin.methodOne(foo); 

}); 
</script> 

でした誰もleフレームワークは手を貸す?乾杯

EDIT **

以下の作品、それはおそらく非常にエレガントではないですが...

xui.extend({ 
    myPlugin : function(){ 

     // create an API object 
     var api = { 
      'publicOne' : function(obj){ 
       return methodOne(obj) 
      } 
     }; 

     // add our API object to prototype 
     xui.fn.myPlugin.api = api; 

     /** 
     * the functions of the plugin 
     **/ 

     // we'll expose this in the API object 
     function methodOne(obj){ 
      // Do something with obj... 
     } 

     function methodTwo(){ 

     } 
    } 
}); 

そしてページに私はこれを使用することができます。

<script type="text/javascript"> 
xui.ready(function(){ 

    // call my plugin on an XUI object, which does its thing 
    x$('element').myPlugin(); 

    // arbitary 
    var foo = x$('#bar'); 

    // call one of the methods statically 
    xui.fn.myPlugin.api.pluginOne(foo); 

}); 
</script> 

目的を説明するために、私はJQTouchと非常によく似たものを作っていますが、メガjQueryとXUIのすぐ上に座って。私はページの遷移を処理するページナビゲーションを処理するメソッドを持っていますが、プログラムでもメソッドをトリガできる必要があります。

これは他のXUIの人々に役立つかもしれませんが、それは現在私のために働いていますが、おそらく改善できるでしょうか?

答えて

0

Liamおそらくそれをやりたい理由を理解していると便利でしょうか?コールバックを介して常に関数を公開することができます。

xui.extend({ 
    myPlugin : function(callback){ 

     var options = []; 

     function methodOne(obj){ 

     } 

     function methodTwo(){ 

     } 

     if(typeof callback === 'function') { 
      return callback(this); 
     } 
    } 
}); 

次に、このようにそれを呼び出す:

<script type="text/javascript"> 
xui.ready(function(){ 

    // call my plugin on an XUI object 
    x$('element').myPlugin(function(myPublic) { 
     var foo = bar; 

     // call one of my methods? 
     myPublic.methodOne(foo); 
    }); 
}); 
</script> 

これはテストされていませんが、動作するはずです。

+0

実際、muメソッドのいくつかはコールバックを追加する必要がありますが、私は説明の中で役に立つほど役に立ちませんでした...プラグイン内のいくつかのメソッドを静的に呼び出すことができる必要があります。オブジェクト上ではありません。私は答えを編集しますが、それはエレガントではありませんが、道を見つけたかもしれません。 –

+0

xui.extendの外にmyPlugin関数を記述し、それをxui.extend(myPlugin)に渡すことができます。このように、あなたはそれを単独で使用することができますし、プラグインとしては、なぜプラグインの外でそれにアクセスする必要があるのか​​理解できません。 –

+0

私のオリジナルの質問を編集しましたが、あなたの提案は意味のあるものになります! –

関連する問題