1

mootools の Element メンバーにいくつかの関数と変数を実装したいと考えています。私はこのようなものを持っています

Element.prototype.currentChild = this.getFirst();
Element.prototype.scrollToNext = function(delta, tag){ .... }

その後、新しい要素を作成し、マウスホイール イベントをスパンにバインドし、currentChild にアクセスします。

body_container = new Element('div', {
events:{
            'mousewheel': function(e){
                var elem = new Element(this);
                elem.currentChild.setStyle('background-color', 'transparent');
                elem.scrollToNext(e.wheel);
                elem.currentChild.setStyle('background-color', '#C6E2FF');
                e.stop();
            }
        }
    });

問題は、次のエラーが発生することです。

キャッチされていない TypeError: オブジェクト [オブジェクト ウィンドウ] にメソッド 'getFirst' がありません

何が原因か知っていますか?

LE: はい、「これ」はエレメントだと思っていました。しかし、なぜそれがウィンドウタイプになるのかわかりません。

4

2 に答える 2

1

実装を使用してプロトタイプを変更します。something.prototype.method = this.somethingsMethod関数が必要になりますが、これはメソッドの実行コンテキストの外部にバインドされていないため、言えません。

Element.implement({
    currentChild: function() {
        return this.getFirst();
    },
    scrollToNext: function() {}
});

MooTools にも別名があります。

Element.alias('currentChild', 'getFirst');

https://github.com/mootools/mootools-core/blob/master/Source/Core/Core.js#L223-225 - 再実装したくない場合の型メソッドのエイリアス。

正直なところ、代わりに要素ストレージを使用できないのはなぜですか?

'mousewheel': function(e) {
    var elem = document.id(this),
        first = elem.retrieve('currentChild');

    first || elem.store('currentChild', first = elem.getFirst());

    first.setStyle('background-color', 'transparent');
    elem.scrollToNext(e.wheel);
    first.setStyle('background-color', '#C6E2FF');
    e.stop();
}
于 2012-07-30T20:26:14.787 に答える
0

素早い回答ありがとうございます。一方、実装を使用したDimitarの最初のソリューションに基づく方法を見つけました。次のようになります。

Element.implement({ 
    currentChild: function(){ 
        if(!this._currentChild) this._currentChild = this.getFirst(); 
        return this._currentChild; 
    }
 } 
于 2012-07-31T15:49:56.400 に答える