MooTools Chaining - PullRequest
       9

MooTools Chaining

1 голос
/ 05 февраля 2010

Я не думаю, что функция / метод должна когда-либо возвращать void & mdash; вместо этого она должна возвращать this. Вот почему я был удивлен, узнав, что это не работает:

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

Код должен найти <input>, который является потомком элемента со значением атрибута id, равным buttonContainer, и добавить два пробела к его атрибуту value. Хотя вышеупомянутые ошибки кода, и я вынужден написать:

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

Разве у MooTools нет способа объединить эти два отдельных оператора в одно? Что-то похожее на мой первый фрагмент?

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

MooTools не может перепривязать this на лету для каждого вызванного метода.Это было бы невозможно.

Вы должны понимать, что каждый отдельный вызов вашей цепочки находится в одной и той же области, поэтому this остается тем же.jQuery и все остальные фреймворки имеют ту же проблему.Если вы хотите выполнить две операции над элементом одновременно, вы должны сохранить объект в переменной, а затем использовать эту переменную для ссылки на объект точно так же, как вы это делали во втором примере:

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

this может изменяться только при изменении области действия (что в JavaScript всегда, когда вы нажимаете фигурную скобку {}, включающую функцию).Это не ограничение цепочки MooTools.Так работает JavaScript в целом.

1 голос
/ 05 февраля 2010

То, что вы спрашиваете, не имеет ничего общего с цепочкой. this не имеет контекста, поэтому ваш вызов не удался. Решение, которое вас не устраивает, - это то, как вам нужно будет написать его для других значений / атрибутов, но для прямого изменения, подобного этому, напишите это так:

$('buttonContainer').getElement('input').value += '  ';
...