2015-04-09 2 views
1

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

попытался с помощью initPolymer (в результате ошибки стека: элемент уже инициализирован)

4 файла.

item.html

<polymer-element name="init-item" > 
    <template> 
    <input type="image" src="button_minus_red.gif" on-click="{{remove}}"> 
    {{Name}} 

    </template> 

    <script type="application/dart" src="item.dart"></script> 
</polymer-element> 

item.dart:

import 'package:polymer/polymer.dart'; 

@CustomTag('init-item') 
class Item extends PolymerElement{ 
    @observable String Name='hello'; 
    void remove(){ 
    Name=''; 
    } 
    PlayerItem.created(): super.created(){} 
} 

index.dart:

 import 'package:polymer/polymer.dart'; 
     import 'item.dart' 

     // getting unused warning for item.dart 

     main() async{.... 
    //init moved to main 
    initPolymer().then((_) {}); 
    } 

//adding to form element on click event 
Code to run(click event) 
{ //onReady added here 
    Polymer.onReady.then((_) { yourPlayer.children.add(new Element.tag('player-item')) ;}); 

     } 

тег добавлен в index.html, а также динамического добавления, как показано выше.

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

Предыдущая ошибка: при использовании initPolymer элемент, добавленный вместо тега, а также в форме. при последующих событиях щелчка, добавленных в форму, но ошибки стека (инициализация уже выполнена)

Есть ли проблемы из-за асинхронного (сильно ложного)? Как мне подойти к этому?

ответ

2

item не является допустимым именем для полимерного или пользовательского элемента. Это требование, чтобы пользовательские элементы должны иметь тире в своем имени, например, my-item.

В начале вашего вопроса вы пишете о событии click, но пример кода внизу показывает, что вы делаете это с main(). Эти две вещи совершенно разные. Если вы вызываете код в обработчике элемента Polymer, он должен работать. Если у вас есть обычная основная функция, вам необходимо убедиться, что Polymer инициализирован правильно, прежде чем создавать элементы.

Для получения более подробной информации см. https://stackoverflow.com/a/20982658/217408.

import "package:polymer/polymer.dart"; 

main() { 
    initPolymer().then((zone) => zone.run(() { 
    Polymer.onReady.then((_) { 
     var yourPlayer = querySelector('#people'); 
     yourPlayer.children.add(new Element.tag('player-item')); 
    }); 
    })); 
} 
+0

Давайте [продолжить это обсуждение в чате] (http://chat.stackoverflow.com/rooms/74970/discussion-between-user1869714-and-gunter-zochbauer). – user1869714

+0

Я не знаю, как вы это делали. В зависимости от того, где находится ваш обработчик кликов и ваш элемент Polymer, либо 'querySelector ('init-item'). Remove()' или 'shadowRoot.querySelector ('init-item'). Remove()' должен работать. Я собираюсь ложиться спать. Если это не делает то, что вы хотите, создайте новый вопрос, который показывает, как выглядит ваш код сейчас, и я буду смотреть утром. –

+0

Сэр, новый вопрос отправлен http://stackoverflow.com/questions/29577881/removing-polymer-elements-in-dart – user1869714

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