3

YUI3 では、Nodeモジュールなどからメソッドを上書きすることは可能ですか? たとえば、次のようなことをしたい:

Y.Node.prototype.get = function () {
    // Do some stuff then call the original function
};

Yライブラリによって作成されたと思われる YUI のグローバルに利用可能なインスタンスが存在する場合、これは(ご想像のとおり) 完全に機能します。モジュールローダーを使用してコールバックを渡すと機能しません。

YUI().use("*", function (DifferentY) {
    DifferentY.Node.prototype.get === Y.Node.prototype.get; // false
});

私は YUI ソースを掘り下げるのに時間を費やしましたが、これまでのところDifferentY、前の例のどこでどのように作成されているか (ひいては、どこDifferentY.Nodeで作成されているか) を突き止めることができませんでした。

私はこれまで YUI を使用したことがないので、これについて完全に間違った方法で行っている可能性があります。

4

2 に答える 2

5

その例を見ると、Y について誤解があるようです。YUI3 では、すべてがサンドボックス化されているため、YUI の複数のインスタンスを同時に実行できます。Y はグローバル変数ではありません。YUI().use メソッドを呼び出すとインスタンス化され、その関数内にのみ存在します。そのため、SO のコードには DifferentY のみが存在し、Y は存在しません。

YUI().use('node', 'event', function (Y) {
    // The Node and Event modules are loaded and ready to use.
    // Y exists in here... 
});

したがって、YUI を「外部から」拡張したい場合は、YUI のモジュール戦略を基に構築し、YUI.add() を使用して YUI モジュールを作成します。

if (YUI) {
  YUI.add('node-enhancement', function (Y) {
    Y.Node.prototype.get = function () {
      // Do some stuff then call the original function
    };
  }, '0.0.1', {
    requires: [Node]
  });
}

開発者に拡張機能をモジュールとしてロードさせます (とにかく yui3 でそれを行う方法)。

YUI().use('node-enhancement'), function(Y) {
    // just use YUI as allways
});

グローバル YUI オブジェクトがどのように機能するかの説明については、次の概要が役立つかもしれません: http://yuilibrary.com/yui/docs/yui/

于 2013-10-09T21:37:19.940 に答える