dart
  • dart-polymer
  • 2014-11-06 86 views 1 likes 
    1

    我無法從子組件向父組件返回數據並返回到子組件。嵌套聚合物定製組件數據綁定

    我做了一個簡單的嵌套組件測試牀。這裏是孩子:

    <link rel="import" href="../packages/polymer/polymer.html"> 
    
    <polymer-element name="child-comp" attributes="x y"> 
        <template> 
        <input type='text' value='{{x}}'/> 
        <p>-x={{x}}-</p> 
        <p>list: 
         <template repeat='{{y}}'>-{{ }}-</template> 
        </p> 
        </template> 
    
        <script type='application/dart'> 
        import 'package:polymer/polymer.dart'; 
    
        @CustomTag('child-comp') 
        class ChildComp extends PolymerElement { 
         @observable var x; 
         @observable var y; 
    
         ChildComp.created() : super.created(); 
         } 
        </script> 
    </polymer-element> 
    

    它需要一個文本輸入(x)和(輸入後立即P)呼應了出來。它還將x發送回父控件,並將其添加到列表(y)中,然後在列表中對其進行迭代。

    這裏是父組件:

    <link rel="import" href="../packages/polymer/polymer.html"> 
    <link rel="import" href="../components/child_comp.html"> 
    
    <polymer-element name="top-comp"> 
        <template> 
        <child-comp x='{{s}}' y='{{t}}'></child-comp> 
        </template> 
    
        <script type='application/dart'> 
        import 'package:polymer/polymer.dart'; 
    
        @CustomTag('top-comp') 
        class TopComp extends PolymerElement { 
         @observable String  s = '1234'; 
         @observable List<String> t = ['A', 'B', 'C']; 
    
         TopComp.created() : super.created(); 
    
         sChanged(oldVal, newVal) { 
         t.add(newVal); 
         } 
         } 
    
        </script> 
    </polymer-element> 
    

    從孩子到家長工作和改變正確添加到列表中。但是List似乎並沒有到達孩子--DOM從未更新過。

    我已經試過了裝飾的每一個可能的組合,但也許答案是綁定語法=的變體..

    一個側面說明:有沒有對裝飾權威更新的文檔?搜索變成了一堆不同古代的參考資料。

    回答

    2

    如果我正確理解您的問題,則需要確保您的List不僅是可觀察的,而且還是它的元素。你可以這樣做是這樣的:

    @observable List<String> t = toObservable(['A', 'B', 'C']); 
    

    這種方式,改變t的元素(而不是僅僅t本身)是‘宣佈’,而DOM可以相應地更新。

    +0

    工作!非常感激。你還記得你是如何發現這個的?有沒有什麼能夠說明裝飾者應用時會發生什麼? – timecc 2014-11-06 23:52:05

    +0

    自從我學習了很長一段時間。不知道從哪裏。但@observable會導致對List的引用拋出PropertyChanged事件,並且toObservable()會獲取List或Map並對內部元素執行相同操作,因此對不改變List引用的元素的更改也會觸發PropertyChanged事件。本質上,就是這樣,無論如何。 – montyr75 2014-11-07 00:07:03

    相關問題