0

jQuery 1.6.4 から 1.9.x へのアップグレードの一環として、jQuery ウィジェット ブリッジを使用して、jQuery の拡張機能としてではなく、スタンドアロン オブジェクトとして作成されたウィジェットの関数にアクセスできるようにする方法を理解しようとしています。

すべての例 (この例など) では、プロトタイプ関数をオブジェクトのソース定義として使用しています。これは、{} ベースの定義から直接オブジェクトを定義するためにマップされていないようです。

たとえば、次のようなウィジェットを定義しています。

var ControlPanel = {

    instance: null,

    options: {
        //Some options here
    },

    simpleFunction: function(){
        alert("I am a function");
    },

    _init: function() {
        //Some init stuff here
    }
}

$.widget("basereality.controlPanel", ControlPanel); // create the widget

//This doesn't appear to work...
$.widget.bridge('controlPanel', $.basereality.controlPanel); //'Bridge' the widget

そして、次のようにしてインスタンスを作成します。

var controlPanelParams = {
  // some options go here
};

var newControlPanel = $('#controlPanel').controlPanel(controlPanelParams);

作成したオブジェクトでメソッド「simpleFunction」を呼び出せるようにしたいと思います。これは、次のようにして実行しようとしました。

newControlPanel.simpleFunction();
//and 
$(newControlPanel).simpleFunction();

どちらも「オブジェクトには simpleFunction というメソッドがありません」というエラーが発生します。

では、私は何を間違っており、関数ベースでないオブジェクトで $.widget.bridge をどのように使用するつもりですか?

4

1 に答える 1

0

私はそれを理解したと思います。これの代わりに:

$(newControlPanel).addControl(smartyControlPanel);

次のようにパラメーターとして呼び出して、関数にアクセスします。

newControlPanel.controlPanel("addControl", smartyControlPanel);

また、最初のプロトタイプの関数に基づいてコードを変換しました。

var ControlPanel = function(options, element){
    this.options = options;
    this.element = element;

    this._init();
};

ControlPanel.prototype = {
    //Everything else in here
}

パラメータとして呼び出す必要があるのは、関数として直接呼び出すよりもはるかに理解しにくいものです。

于 2013-02-05T10:44:29.940 に答える