1

関数/メソッドは決して void を返すべきではないと思います — 代わりに、 を返すべきthisです。そのため、これが機能しないことに驚いたのです。

$('buttonContainer').getElement('input').set('value', this.get('value') + '  ');

コードが想定しているのは、属性値が<input>の要素の子である を見つけ、その属性に 2 つの空白文字を追加することです。ただし、前述のコードエラーが発生したため、次のように書く必要があります。idbuttonContainervalue

var input = $('buttonContainer').getElement('input');
input.set('value', input.get('value') + '  ');

MooTools には、これら 2 つの別々のステートメントを 1 つにチェーンする方法がありませんか? 私の最初のスニペットに似た何か?

4

2 に答える 2

3

MooTools はthis、呼び出されたすべてのメソッドに対してオンザフライで再バインドすることはできません。これは不可能です。

チェーンへのすべての呼び出しが同じスコープ内にあるためthis、同じままであることを理解する必要があります。jQuery と他のすべてのフレームワークには同じ問題があります。要素に対して同時に 2 つの操作を実行する場合は、オブジェクトを変数に格納し、その変数を使用して、2 番目の例とまったく同じようにオブジェクトを参照する必要があります。

var input = $('buttonContainer').getElement('input');
input.set('value', input.get('value') + '  ');

thisスコープが変更された場合にのみ変更できます (JavaScript では常に{}、関数を囲む中括弧を押したときです)。これは MooTools の連鎖の制限ではありません。これは、JavaScript が一般的に機能する方法です。

于 2010-02-05T05:14:14.073 に答える
1

あなたが求めていることは、連鎖とは何の関係もありません。thisコンテキストがないため、呼び出しは失敗します。あなたが満足していない解決策は、他の値/属性に対してそれを記述する必要がある方法ですが、このような簡単な変更を行うには、次のように記述します。

$('buttonContainer').getElement('input').value += '  ';
于 2010-02-05T05:13:07.463 に答える