Ответ 1
ответ на этот вопрос
list.setKeyBindings(???);//не знаю, как использовать эту функцию
согласно 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
должен иметь object
такой структуры:
{
'up': '_didMoveUp',
'down': '_didMoveDown',
'enter': '_didEnter'
}
чтобы построить такой объект, вы можете использовать следующее:
new JSONObject() {{
put("up", new JSONString("_didMoveUp"));
put("down", new JSONString("_didMoveDown"));
put("enter", new JSONString("_didEnter"));
}}.getJavaScriptObject();
Я понятия не имею, где я нахожу функции _didMoveUp, _didMoveDown и _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
здесь выдержка
_didMoveUp: function() {
this._focusPhysicalItem(Math.max(0, this._focusedIndex - 1));
},
_didMoveDown: function() {
this._focusPhysicalItem(Math.min(this._virtualCount, this._focusedIndex + 1));
},
_didEnter: function(e) {
// focus the currently focused physical item
this._focusPhysicalItem(this._focusedIndex);
// toggle selection
this._selectionHandler(e.detail.keyboardEvent);
}
Как настроить обработчик для записи событий клавиатуры с помощью Vaadin Полимер GWT lib?
Как я могу получить событие, когда такие ключи, как ввод, нажимается?
Я мог бы найти этот Полимер соглашение: свойства, не предназначенные для внешнего использования, должны иметь префикс с подчеркиванием.
Это причина, по которой они не отображаются в JsType
IronListElement
.
Вы можете изменить эту функцию, используя JSNI
. Я думаю, что smth вот так:
private native static void changeDidMoveUp(IronListElement ironList) /*-{
var _old = ironList._didMoveUp;
ironList._didMoveUp = function() {
console.log('tracking');
_old();
}
}-*/;
или добавить новый
IronListElement element ...
com.vaadin.polymer.elemental.Function<Void, Event> func = event -> {
logger.debug(event.detail);
...
return null;
};
private native static void addUpdatePressed(IronListElement ironList, Function func) /*-{
ironList._updatePressed = func;
}-*/;
{
addUpdatePressed(element, func);
element.addOwnKeyBinding("a", "_updatePressed");
element.addOwnKeyBinding("shift+a alt+a", "_updatePressed");
element.addOwnKeyBinding("shift+tab shift+space", "_updatePressed");
}
должен работать. Вы можете получить элемент из IronList#getPolymerElement()
.
Имейте в виду, что я не тестировал этот код:)