2014-10-03 8 views
2

То, что я пытаюсь сделать, это изменить функцию, которая вызывает вызовы на основе спа-маршрута. вот что я попробовал (работает внутри пользовательского элемента)динамически меняет атрибут касания

this.$.menuButton.attr['on-tap'] = "{{newFunction}}"; 

также

this.$.menuButton.on-tap = "{{newFunction}}"; 

, а также многие другие попытки ни работали. как изменить значение атрибута, содержащего a - в имени? если это не выполнимо, что было бы рекомендуемым методом для динамического изменения функции включения?

+0

Использования точечной нотации, вы не можете у вас есть дефис, поэтому здесь вы должны сохранить обозначение скобок. Я не знаю полимера, но не можете ли вы просто назначить событие ссылкой на функцию? –

+0

Вы уверены, что это не 'ontap'? Атрибуты 'onXXX' обычно не имеют знаков препинания. – Barmar

+0

Да, я уверен, что атрибут включен (это полимерная вещь). я думаю, я мог бы создать новую функцию, которая запускает событие и прослушивает это событие и изменяет функцию. –

ответ

2

Вместо отображения отображения on- * declarative вы должны использовать прослушиватели событий.

this.addEventListener('tap', this.myFunction); 
this.addEventListener('tap', this.newFunction); 

Это в основном то же самое. Если вам нужны аргументы (event, detail, sender), вы должны передать их сами.

API Reference

+0

Это был подход, который я планировал использовать, и я могу вернуться к нему. Сначала я собираюсь дать декларативный маршрут. спасибо за ответ. –

+0

Добро пожаловать. Я определенно соглашусь с тем, что говорит Эрик Бидельман. Знаменитости, jeez ... :) – Ben

+0

после попытки декларативного метода я решил пойти с этим методом eventListener. главным образом потому, что я уже использую похожие eventListeners для изменения другой ссылки в моем приложении. (это изменение происходит в пользовательском элементе через меня для цикла), поэтому у меня будет мой загорелый огонь, событие, которое я могу прослушивать в моем main.js, а затем изменить функцию, вызванную на основе маршрута приложения. таким образом я могу избежать необходимости отправки отправителя для изменения обработчика. я хотел использовать другой метод, чтобы сохранить столько, сколько я могу включить в пользовательский элемент. но недостаток в терпении снова побеждает. –

3

Если вы хотите идти декларативный маршрут, вы все еще можете использовать on-* обработчиков и привязки данных переворачивать обработчик:

<p on-tap="{{handler}}">Tap me to see what handler is set.</p> 
<button on-click="{{setHandler}}" data-handler="oneHandler">Set Handler 1</button> 

ready: function() { 
    this.setHandler(); 
}, 
setHandler: function(e, detail, sender) { 
    this.handler = !sender ? this.defaultHandler : 
          this[sender.dataset.handler]; 
}, 
defaultHandler: function() { 
    alert('default handler'); 
}, 
oneHandler: function() { 
    alert('one handler'); 
} 

http://jsbin.com/forame/1/edit

Смежные вопросы