2014-02-28 57 views
1

讓我們回到我的問題Query elements inside <content> of a custom element更改<template>(TemplateElement)編程

現在我想渲染開始前以編程方式更改嵌套自定義元素的模板。可能嗎?

<polymer-element name="my-element"> 
    <template> 
    <div> 
    <template id="tml" repeat="{{items}}"> 
    Hi, {{}}! 
    </template> 
    </div> 
    </template> 
    <script type="application/dart" src="my_element.dart"></script> 
</polymer-element> 

<polymer-element name="my-decorator"> 
    <template> 
    <div> 
    <div>Decorator</div> 
    <content> 
     <!-- my-element will be here--> 
    </content> 
    </div> 
    </template> 
    <script type="application/dart" src="my_decorator.dart"></script> 
</polymer-element> 

index.html中:

<my-decorator> 
    <my-element></my-element> 
</my-decorator> 

在my_decorator.dart:

@override 
void enteredView() { 
    super.enteredView(); 

    ContentElement content = shadowRoot.querySelector('content'); 
    MyElement elm = content.getDistributedNodes().firstWhere((e) => e is MyElement); 

    TemplateElement elm = elm.shadowRoot.querySelector("#tml"); 
    // TODO 
    // change template here! 
} 

回答

1

你爲什麼要更改模板? super.attached()
attached()元素已經呈現。

您可以this.templateInstance 訪問模板,並試圖改變它以前super.attached()(或在構造函數或polymerCreated)。 我還沒有做過這件事。

這是沒有問題的改變所呈現的元素。
如果你想避免的是,這種變化是可見的,你可以開始設置(CSS)類,它被定義爲渲染元素不可見,你完成更改後,取出這個類。

+0

原因是在<模板ID = 「TML」 重複= 「{{物品}}」>。集合{{items}}是ObservableList,可以更改。所以我需要更改此列表中所有新項目的視圖。更改模板會更簡單。 – Roman

+0

抱歉,我沒要改變內''