Как установить поведение `on-tap` для < / paper-button > с Javascript в полимере

Объяснение

Из документации Java :

[Блок try] содержит одну или несколько юридических строк кода, которые могут исключение. (Блоки catch и finally объясняются в следующих двух подразделах.)

blockquote>

Исключением является особый вид объекта. Когда вы пишете new Exception(), вы создаете новый объект исключения. Когда вы пишете throw new Exception(), вы создаете новую ошибку, а затем бросаете ее в ближайший блок try-catch, прерывая остальную часть вашего кода.

Когда вы бросаете исключение, он получает , пойманным блоком try-catch, который он вложен в (внутри). То есть, предполагая, что соответствующий блок catch для этого исключения зарегистрирован. Если код не упакован в блок try-catch, программа автоматически отключается, как только возникает ошибка. Используйте try-catch вокруг любого кода или метода, которые могут вызывать ошибку, особенно из-за пользовательского ввода (в пределах разумного).

Некоторые исключения должны быть пойманы, другие - необязательны для улова. (проверено против непроверенного).

Когда вы добавляете throws к сигнатуре метода, вы сообщаете другим методам, что, если они назовут этот метод, у него есть потенциал для выставить проверенное исключение (это не обязательно для снятия флажка). Обратите внимание, что это throws не throw. Это не действие, оно описывает, что оно иногда выполняет какое-либо действие.

Вы используете эту функцию, когда не хотите улавливать ошибку внутри этого метода, но хотите разрешить метод, вызывающий ваш метод чтобы поймать ошибку сами.

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

Примеры

public CircleWithException() throws InvalidRadiusException {
       this(1.0);
}

Здесь CircleWithException() может вызывать InvalidRadiusException (предположительно, этот (1.0) иногда вызывает исключение InvalidRadiusException.)

Код вызов этого метода должен иметь:

try {
    new CircleWithException(); // This calls the method above
} catch (InvalidRadiusException e) { // The object "e" is the exception object that was thrown.
    // this is where you handle it if an error occurs
}

Как я уже говорил, исключение - это только определенный тип объекта, который расширяется Exception

/* Invalid radius class that contains error code */
public class InvalidRadiusException extends Exception {
     private double radius;

/** Construct an exception */
public InvalidRadiusException(double radius) {
       super("Invalid radius " + radius);
       this.radius = radius;
}

/** Return the radius */
public double getRadius() {
    return radius;
 }
}

. Вышеприведенный код определяет новый тип исключения, специфичный для вашей программы / приложения. Существует много предопределенных исключений в стандартной библиотеке Java, но часто вам нужно создать свой собственный.

Чтобы выбросить это исключение, вы сначала создаете объект InvalidRadiusException и затем бросаете его:

throw new InvalidRadiusException(1.0);

0
задан Matthew 20 February 2019 в 16:14
поделиться

1 ответ

Дело в том, что вы вызываете button текстовый узел внутри paper-button и устанавливаете прослушиватель событий на этом узле, который - будучи узлом Text - не запускает события ( кроме некоторых исключений ).

Кроме того, вы передаете this.go() как обратный вызов addEventListener. Это означает, что this.go() выполняется , а затем возвращаемое значение передается как обратный вызов (в данном случае undefined, потому что после console.log вы ничего не возвращаете). Вместо этого вы должны передать идентификатор функции, не вызывая ее:

addEventListener('tap', this.go);

Все вместе:

appendNodeToDom() {
  let prop = this.result[i]['someProperty'];
  let button = document.createElement('paper-button');
  let text = document.createTextNode(prop);

  button.appendChild(text);
  button.addEventListener('tap', this.go); // Add the listener to button
  this.shadowRoot.getElementById('buttons').appendChild(node);
}

go() {
  console.log('go');
}

Просто небольшая заметка: имейте в виду, что у Polymer много инструментов, чтобы избежать выполнения прямых манипуляций с DOM. Если вам просто нужно добавить кнопку в список, вы можете рассмотреть решение, в котором dom-repeat отображает кнопки, а изменения вносятся в базовое свойство массива.

0
ответ дан Umbo 20 February 2019 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: