2013-07-29 5 views
3

У меня проблема с автоматически сгенерированным кодом для веб-компонентов. Вот фрагмент HTML:Проблема с Dart WebUI сгенерированный код

<div id="hidden-ui"> 
    <div id="auth-form" class="..."> 
    ... 
    <to-button></to-button> 
    </div> 
    ... 
</div> 

Как вы можете видеть, есть пользовательский веб-компонент под названием to-button:

<element name="to-button" constructor="TOSimpleButton" extends="div"> 
    ... 
</element> 

При запуске я хочу, чтобы переместить #auth-form снаружи от родительского узла к документу корня:

Element af = document.query('#auth-form'); 
Element db = document.query('BODY'); 
db.children.add(af); 

Это нормально, если в подвижном узле нет настраиваемых веб-компонентов, но в то время как to-button находится внутри I получить rune time RangeError.

Вот кусок авто сгенерированного кода:

__e1 = __root.nodes[9].nodes[1].nodes[7]; 
__t.component(new TOSimpleButton()..host = __e1); 

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

Как я могу справиться с этим?

+0

Зачем вам нужно перенести форму авторизации? Почему вы не можете разместить его в правильной позиции DOM? –

+0

@PixelElephant, идея состоит в том, чтобы иметь скрытую DIV, содержащую все элементы пользовательского интерфейса (формально всплывающие формы), которые могут быть полезны или нет, поэтому, когда мне нужно показать форму аутентификации, я перемещаю ее в корень документа, когда мне нужно ее скрыть - просто переместите его обратно в скрытый div. Согласен, я могу использовать другой подход, более того, я уже использую другой подход, но я думаю, что это разумный вопрос, не так ли? –

+0

ОК, я просто не видел необходимости в вашем конкретном случае, но я согласен, что это может быть проблемой в других ситуациях. –

ответ

2

Похоже, вы хотите время от времени отображать всплывающие окна. Вот что я делаю.

уточняю этот конструктор для диалога/всплывающего окна:

var lifecycleCaller; 

DialogFooComponent() { 
    host = new Element.html('<x-dialog-foo></x-dialog-foo>'); 

    lifecycleCaller = new ComponentItem(this) 
    ..create(); 

    document.body.children.add(host); 
    lifecycleCaller.insert(); 
} 

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

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

import '../dialog/foo/foo.dart'; 

... 

// Later at some point I do: 
new DialogFooComponent(); 

И то, что происходит в том, что у вас есть всплывающие формы, появляющиеся в организме, когда вы хотите их.

Если вы хотите, чтобы закрыть диалоговое окно, вы можете просто вызвать это внутри диалогового компонента:

lifecycleCaller.remove(); 
+0

Я попробую! –

+0

Как использовать шаблон html с этим подходом? –

+0

Что вы подразумеваете под этим?Вы не вставляете диалог/всплывающее окно в HTML, вы вызываете 'new DialogFooComponent()' когда пользователь что-то нажал и т. Д. –

0

Как уже упоминалось here, это не будет исправлено в пакете WebUI, но будет в Polymer.

это не будет исправлено в web_ui pkg. Он должен работать в полимерах pkg.