2014-11-06 3 views
0

У меня есть <core-icon> элемент какЕсть ли способ поймать исключение JavaScript в Dart?

<polymer-element name="app-element"> 
    <template> 
    <core-icon icon="{{icon}}"></core-icon> 
    </template> 
    <script ...> 
</polymer-element> 
@CustomTag('app-element') 
class AppElement extends PolymerElement { 
    AppElement.created() : super.created(); 

    @observable 
    String icon = 'menu'; 

    clickHandler(e) { 
    icon = null; 
    } 
} 

Это приводит к этому исключению

Exception caught during observer callback: TypeError: Cannot read property 'split' of null 
    at core-icon.Polymer.updateAlt (http://localhost:63342/core-elements/packages/core_elements/src/core-icon/core-icon.html:188:50) 
    at core-icon.Polymer.updateIcon (http://localhost:63342/core-elements/packages/core_elements/src/core-icon/core-icon.html:147:14) 
    at core-icon.g.invokeMethod (http://localhost:63342/core-elements/packages/polymer/src/js/polymer/polymer.js:13:25932) 
    at core-icon.g.notifyPropertyChanges (http://localhost:63342/core-elements/packages/polymer/src/js/polymer/polymer.js:13:24037) 
    at Object.x.report_ (http://localhost:63342/core-elements/packages/polymer/src/js/polymer/polymer.js:12:18274) 
    at Object.S.check_ (http://localhost:63342/core-elements/packages/polymer/src/js/polymer/polymer.js:12:22612) 
    at c (http://localhost:63342/core-elements/packages/polymer/src/js/polymer/polymer.js:12:12181) polymer.concat.js:4861x.report_ polymer.concat.js:4861S.check_ polymer.concat.js:5264c 

На мой взгляд это, но в <core-icon>, и я собираюсь создать вопрос, но мой вопрос в любом случае:

Есть ли способ уловить такое исключение JavaScript в Dart?

Я, конечно же, попытался обернуть линию icon = null; с try/catch или window.onError.listen((e)...); без успеха.

+0

Вы должны попробовать/поймать с самого начала разговора. Вот почему try/catch, окружающий 'icon = null', не помогает. Почему бы вам не использовать: ''. Я не думаю, что это ошибка, почему вы хотите, чтобы значок был нулевым? – Robert

+0

Непонятно, что вы подразумеваете под «началом вызова». Я могу проверить «null» в привязке или в моем коде, но я все же думаю, что «core-icon» не должен бросать, когда 'icon' становится' null'. Я/не устанавливал его на «нуль» намеренно, но я наткнулся на это, потому что в некоторых ситуациях модель или поле в образце 'icon' обязательно должно быть« null ». Вышеприведенный код упрощен, чтобы сделать небольшой пример, который позволяет воспроизвести проблему. –

+0

Может быть, есть способ зарегистрировать глобальный обработчик ошибок, который позволяет обрабатывать такие исключения? –

ответ

0

Я на самом деле не пробовал, но я предполагаю, что это решение:

Источник: https://github.com/dart-lang/core-elements/issues/148#issuecomment-62574668

Похоже, фактический вопрос исключения поимки на стороне JS, а затем просто распечатано на консоль, поэтому мы не можем получить к ней доступ. Они установить Observer._errorThrownDuringCallback к истине, хотя, так что вы можете добавить следующее в тесте, и она не будет выполнена надлежащим образом:

expect(context['Observer']['_errorThrownDuringCallback'], false, 
    reason: 'Setting icon to null shouldn\'t throw an error.');