JavaScript – 处理GWT中铁列表的键盘事件?

前端之家收集整理的这篇文章主要介绍了JavaScript – 处理GWT中铁列表的键盘事件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从Google Polymer使用 iron-list.
  1. <iron-list items="[[data]]" as="item">
  2. <template>
  3. <div tabindex$="[[tabIndex]]">
  4. Name: [[item.name]]
  5. </div>
  6. </template>
  7. </iron-list>

我可以使用Polymer.IronA11yKeysBehavior,但即使在example我也不知道如何将它添加到JavaScript到我的铁列表.

使用Vaadin Polymer GWT lib.在这个lib你有

  1. IronList list;
  2. list.setKeyBindings(???); // don't know how to use this function
  3. list.setKeyEventTarget(????); // don't know how to use this function

当我检查键绑定的当前值时,我定义了一个打印函数来将变量记录到控制台:

public native void print(JavaScriptObject obj)/ – {
的console.log(OBJ);
} – /;

然后我打印当前值:

  1. print(list.getKeyBindings());

结果是:

  1. Object {up: "_didMoveUp",down: "_didMoveDown",enter: "_didEnter"}

似乎已经定义了一些关键绑定,但我不知道我在哪里找到函数_didMoveUp,_didMoveDown和_didEnter.

当我做

  1. print(list.getKeyEventTarget());

我得到:

  1. <iron-list class="fit x-scope iron-list-0" tabindex="1" style="overflow: auto;">
  2. </iron-list>

如何使用Vaadin Polymer GWT lib设置捕获键盘事件的处理程序?按下Enter键时,如何收到事件?

解决方法

回答这个问题

list.setKeyBindings(???); // don’t know how to use this function

根据com / vaadin / polymer / vaadin-gwt-polymer-elements / 1.2.3.1-SNAPSHOT / vaadin-gwt-polymer-elements-1.2.3.1-20160201.114641-2.jar!/ com / vaadin / polymer / public / bower_components /iron-list/iron-list.html:292

keyBindings应该有这样的结构的对象:

  1. {
  2. 'up': '_didMoveUp','down': '_didMoveDown','enter': '_didEnter'
  3. }

要构建这样的对象,可以使用以下内容

  1. new JSONObject() {{
  2. put("up",new JSONString("_didMoveUp"));
  3. put("down",new JSONString("_didMoveDown"));
  4. put("enter",new JSONString("_didEnter"));
  5. }}.getJavaScriptObject();

I have no idea where I find the functions _didMoveUp,_didMoveDown and
_didEnter

它们可以在这里找到:com / vaadin / polymer / vaadin-gwt-polymer-elements / 1.2.3.1-SNAPSHOT / vaadin-gwt-polymer-elements-1.2.3.1-20160201.114641-2.jar!/ com / vaadin / polymer /public/bower_components/iron-list/iron-list.html:1504

这是提取

  1. _didMoveUp: function() {
  2. this._focusPhysicalItem(Math.max(0,this._focusedIndex - 1));
  3. },_didMoveDown: function() {
  4. this._focusPhysicalItem(Math.min(this._virtualCount,this._focusedIndex + 1));
  5. },_didEnter: function(e) {
  6. // focus the currently focused physical item
  7. this._focusPhysicalItem(this._focusedIndex);
  8. // toggle selection
  9. this._selectionHandler(e.detail.keyboardEvent);
  10. }

How can I set up a handler for capturing keyboard events using Vaadin
Polymer GWT lib?

How can I receive an event when keys like enter are
pressed?

我可以找到这个Polymer convention:不适合外部使用的属性应该带有下划线.

这就是为什么它们不会暴露在JsType IronListElement中的原因.
您可以使用JSNI更改此功能.我认为这样的smth:

  1. private native static void changeDidMoveUp(IronListElement ironList) /*-{
  2. var _old = ironList._didMoveUp;
  3. ironList._didMoveUp = function() {
  4. console.log('tracking');
  5. _old();
  6. }
  7. }-*/;

添加一个新的

  1. IronListElement element ...
  2.  
  3. com.vaadin.polymer.elemental.Function<Void,Event> func = event -> {
  4. logger.debug(event.detail);
  5. ...
  6. return null;
  7. };
  8.  
  9. private native static void addUpdatePressed(IronListElement ironList,Function func) /*-{
  10. ironList._updatePressed = func;
  11. }-*/;
  12.  
  13. {
  14. addUpdatePressed(element,func);
  15. element.addOwnKeyBinding("a","_updatePressed");
  16. element.addOwnKeyBinding("shift+a alt+a","_updatePressed");
  17. element.addOwnKeyBinding("shift+tab shift+space","_updatePressed");
  18. }

应该工作您可以从IronList#getPolymerElement()获取元素.

记住,我还没有测试这个代码:)

猜你在找的JavaScript相关文章