2017-01-20 6 views
1

Я попытался создать и использовать свое поведение в соответствии с PolymerTS docs, но выбрано Uncaught ReferenceError (ListViewBehavior не определено).Использование пользовательского поведения в настраиваемом элементе Polymer/Typcript throw Uncaught ReferenceError

Это мое поведение (list-view/list-view-behavior.ts):

class ListViewBehavior extends polymer.Base { 
    ... 

и это, как я использовал его (asset-list.ts):

/// <reference path="list-view/list-view-behavior.ts"/> 
@component('asset-list') 
@behavior(ListViewBehavior) 
class AssetList extends polymer.Base implements { 
    ... 

Если добавить поведение в том же файле (asset-list.ts), оно работает.

+2

Вы пробовали smth как 'import {ListViewBehavior} из 'list-view/list-view-behavior''? –

+0

Это дает исключение для перезаписи: «ошибка TS2306: файл« ../list-view-behavior.ts »не является модулем.», Также если я обернуваю класс в модуль и экспортирую его. – pme

ответ

1

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

Исправление было добавить этот импорт в файл класса моего компонента:

import 'list-view/list-view-behavior'; 

уборщик исправление, вынудит ошибку компиляции, когда возникает такая ситуация, чтобы экспортировать класс Поведение в:

// In list-view/list-view-behavior.ts ... 
export class ListViewBehavior extends polymer.Base {...} 

И импортировать его в компонент файла:

// In asset-list.ts ... 
import {ListViewBehavior} from 'list-view/list-view-behavior'; 
+0

Это еще и другое исключение Runtime Exception: 'Uncaught ReferenceError: require not defined'. Я подозреваю, что мне нужно добавить «require» в качестве зависимости. – pme

+0

Да, это будет ваша установка сборки, которая нуждается в исправлении. Я рекомендую ['polymer-typescript-starter-kit'] (https://github.com/tony19/polymer-typescript-starter-kit) (мой WIP), который использует SystemJS. Он настроен и готов к работе. На самом деле это то, что я использовал для проверки своего ответа. – tony19

+0

спасибо, что помогло. Стартовый комплект, который вы предлагаете, выглядит многообещающим. Я попробую, если у меня будет время. – pme

1

Просто для полноты картины, вот что ж наконец, для меня. (Когда у меня есть время, я дам polymer-typescript-starter-kit попробовать, как мое решение не очень приятно.)

Во-первых, я должен был создать модуль:

module CMSBehaviors { 
    export class ListViewBehavior extends polymer.Base { 
    ... 
    } 
} 

Тогда я мог бы использовать его непосредственно:

@behavior(CMSBehaviors.ListViewBehavior) 

В elements.html, я добавил следующее:

<script src="../bower_components/polymer-ts/polymer-ts.min.js"></script> 
<script src="../services/cms-behaviors.js"></script> 

polymer-ts.min.js, так как поведение продолжается от polymer.Base.

 Смежные вопросы

  • Нет связанных вопросов^_^