Добавить API в веб-компонент Polymer

Я создаю веб-компонент Polymer, который должен реагировать на события мыши/касания. Я хотел бы связать on-tap="{{$.myElement.show}}", где show — это функция в элементе:

show: function(e) {
  // Do something with the event here
}

Можно ли в любом случае определить общедоступный API в Polymer. Маршрут, который я иду в данный момент, состоит в том, чтобы иметь attributes="event" на элементе, тогда родительский элемент имеет on-tap="{{updateEvent}}":

updateEvent: function(e) {
  this.$.myElement.event = e;
}

Затем элемент просто имеет:

eventChanged: function() {
  show(this.event);
}

Что только кажется шаблонным (думаю, это выдуманное слово). Можно ли как-то добавить функцию show в прототип элемента?


person Matt Clarkson    schedule 29.05.2014    source источник
comment
Я здесь тупой, вы даже можете получить доступ к API из DOM? Вам нужно предоставить constructor="MyElement", чтобы вы могли создать его в JavaScript var el = new MyElement, а затем сделать el.show?   -  person Matt Clarkson    schedule 29.05.2014


Ответы (1)


Если show() является методом вашего элемента, просто используйте on-tap="{{show}}". show() является частью общедоступного API элемента.

Но похоже, вы хотите вызвать метод другого элемента? Это недавно появилось в запросе на включение: https://github.com/Polymer/polymer-dev/pull/30

То, что у вас есть с настройкой this.$.myElement.event = e; и использованием eventChanged() в myElement, работает. Вы также можете просто вызвать метод элемента напрямую:

updateEvent: function(e) {
  this.$.myElement.show();
}

Вот несколько других способов: http://jsbin.com/guyiritu/1/edit.

person ebidel    schedule 29.05.2014
comment
Именно этим пиаром я и занимаюсь! Будет отслеживать это. - person Matt Clarkson; 29.05.2014