2017-02-20 16 views
3

У меня есть полимерный компонент, на который ссылаются другие компоненты. Что-то вроде:Полимерная ошибка «Тип с таким именем уже зарегистрирован» с использованием Polymer.Base.importHref

В index.html

<link rel="import" href="lib/polymer/polymer.html"> 
<link rel="import" href="component-one.html"> 

... 

<component-one></component-one> 

В component-one.html

<link rel="import" href="sub-component.html"> 
<dom-module id="component-one"> 
    <template> 
     <sub-component></sub-component> 
    </template> 
    <script>Polymer({ is: 'component-one' });</script> 
</dom-module> 

В component-two.html

<link rel="import" href="sub-component.html"> 
<dom-module id="component-two"> 
    <template> 
     <sub-component></sub-component> 
    </template> 
    <script>Polymer({ is: 'component-two' });</script> 
</dom-module> 

В sub-component.html

<dom-module id="sub-component"> 
    <template>blah blah blah</template> 
    <script>Polymer({ is: 'sub-component' });</script> 
</dom-module> 

Проблема возникает, когда я пытаюсь динамически загружать второй компонент в index.html:

function importHref(href) { 
    return new Promise((resolve, reject) => { 
     Polymer.Base.importHref(href, function (e) { 
      resolve(e.target); 
     }, reject, true); 
    }); 
} 

... 

await importHref('component-two.html'); 
// Now I can use <component-two> 

Это бросает исключение:

Uncaught DOMException: Не удалось выполнить 'registerElement' на ' Документ ': Ошибка регистрации для подкомпонента типа. Тип с таким именем уже зарегистрирован.

Я полагаю, что это происходит из-за sub-component.html которые ссылаются на два компонента, но и также ссылаться много бумажных и железных элементов, и ни один из них не вызывает эту ошибку.

Как избежать этого исключения?

+0

проблем нет. проблема должна быть где-то еще в вашем коде. – Supersharp

+0

@Supersharp Ах, да, это так, я добавлю ответ, если кто-то еще ударит по этому поводу. – Keith

ответ

2

Проблема была опечаткой на пути к подкомпоненту.

В component-one.html

<link rel="import" href="../components//sub-component.html"> 

В component-two.html

<link rel="import" href="../components/sub-component.html"> 

Оба эти успешно маршрута (в IIS/Kestrel) и вернуть sub-component.html, но видятся полимера, как два разных URI и, следовательно, две разные компоненты.

Если вы получите эту ошибку, дважды проверьте, что все ваши импортные решения разрешены на идентичные URI, а не только на то, что они вернут правильный контент.