0

ウィジェット ファクトリ パターンを使用して小さな jQuery ウィジェットを作成しました。ローカルでは問題なく動作しますが、コードを Heroku にプッシュすると動作しなくなります。

次のような小さなテスト アプリを作成するとします。

(function ($, undefined) {
$.ui.mytest = {
  _create: function () {
      alert('test');
  },
  destroy: function () {
      // if using jQuery UI 1.8.x
      $.Widget.prototype.destroy.call(this);
      // if using jQuery UI 1.9.x
      //this._destroy();
  },
  options:{}
};
$.widget("ui.mytest", $.ui.mytest);


})(jQuery);

アラートはローカルで出力されますが、実稼働環境でアセットがコンパイルされると、次のエラーが発生します。

Uncaught TypeError: Cannot read property 'length' of undefined application-2ecb4e7c4dcb5be5c5d9884cdb6c266c.js:14
Uncaught TypeError: Object [object Object] has no method 'mytest' 

奇妙なことは、私が本番環境$.ui.mytestで自分のコンソールを呼び出すことができ、それが実際に存在することです。どんな助けでも大歓迎です。

4

1 に答える 1

0

他のjQueryUIウィジェットを開発環境に含めていますが、定義しようとする前にUI名前空間を使用している他のウィジェットがないかのように本番環境には含めていません。定義されない$.ui.mytestため、エラーが発生します$.ui。名前空間は、を呼び出した後でのみ定義されます$.widget

$.widget()基本的に、ウィジェットのプロトタイプになるものを最終的にコンストラクターの名前空間になるものの下に格納しようとしているので、そのオブジェクトを2番目の引数として直接渡す方がはるかに理にかなっています。例えば:

$.widget('ui.mytest', {
    _create: function () {
        alert('tesst');   
    }
});

上記は、次のようなコンストラクター関数を自動的に作成します。

new $.ui.mytest(options, element);

ただし、ウィジェットファクトリは上記のラッパーであるjQueryプラグインも定義しているため、このように直接インスタンス化することはほとんどありません。

于 2013-02-03T02:36:32.407 に答える