Я экспериментировал с хранилищем элементов, и я озадачен проблемой с .retrieve();
в хранилище элементов.
В документации указано:
Элемент: retrieve фактически принимает необязательный второй параметр, который будет действовать как значение по умолчанию для сохранения, если другое значение ранее не существовало. Затем он получит значение, как ожидалось.
Основные примеры работают, но когда я создаю экземпляр Class во втором параметре, эта реализация запускается каждый раз, даже если я могу убедиться, что .retrieve();
возвращает объект Class
, который был созданный ранее.
Relevent jsFiddle
Если вы посмотрите на скрипку, вы увидите, что каждый раз, когда вы нажимаете div, myClass снова создается. В идеале, его следует создать один раз, этот объект должен быть сохранен в хранилище элементов и надлежащим образом извлечен, чтобы предотвратить его повторное создание.
Вот как я звоню .retrieve();
:
$('baz').addEvent('click', function() {
this.retrieve('foobar', new myClass()).foo();
});
... и просто для удовольствия, я попробовал это (это тоже не сработало):
$('baz').addEvent('click', function() {
this.retrieve('foobar', (function() {
return new myClass();
})()).foo();
});
... и вот как я наконец-то начал работать, НЕ используя второй параметр .retrieve()
:
$('baz').addEvent('click', function() {
var instClass = this.retrieve('foobar');
if (instClass == null) {
instClass = this.store('foobar', new myClass()).retrieve('foobar');
}
instClass.foo();
});
Любая подсказка, что вызывает такое поведение?