2015-09-08 47 views
0

我有一個自定義元素<x-marker><paper-checkbox>它裏面。傳承聚合物的HTML屬性嵌套組件

我想在我的元素上有一個checked屬性來反映<paper-checkbox>,但我的解決方案似乎不是這樣做的方式。

HTML:

<x-marker is-checked="<%= someBoolean %>"></x-marker> 

元素:

<dom-module id="x-marker"> 

    <template> 
    <div> 
     <paper-checkbox id="checkbox"></paper-checkbox> 
    </div> 
    </template> 

    <script> 
    Polymer({ 
     is: 'x-marker', 

     properties: { 
     isChecked: String 
     }, 

     listeners: { 
     change: 'changeHandler' 
     }, 

     attached: function() { 
     if (this.isChecked === 'true') { 
      this.$.checkbox.setAttribute('checked', this.isChecked); 
     } 
     }, 

     changeHandler: function (event, detail, sender) { 
     //... 
     } 
    }); 
    </script> 

</dom-module> 

聚合物0.5你可以使用checked?="{{isChecked}}",但是這似乎並沒有在1.0的工作了。同樣硬編碼<paper-checkbox checked="false">仍然檢查只要該屬性存在的複選框。價值似乎並不重要,這就是爲什麼屬性本身必須被綁定,而不是它的價值。

我似乎無法想出解決辦法,包括處理財產作爲字符串=== 'true',而不是一個布爾值,直將其綁定到<paper-checkbox>

回答

0

在1.0,你只需要使用checked="{{isChecked}}"。可以按如下方式實現:

HTML:

<x-marker checked="{{someBoolean}}"></x-marker> 

元:

<dom-module id="x-marker"> 

    <template> 
    <div> 
     <paper-checkbox id="checkbox" checked="{{checked}}">Check me</paper-checkbox> 
    </div> 
    </template> 

    <script> 
    Polymer({ 
     is: 'x-marker', 

     properties: { 
     checked: { 
      type: Boolean, 
      observer: '_checkChanged' 
     } 
     }, 

     _checkChanged: function(newValue, oldValue) { 
     // Do something 
     } 

    }); 
    </script> 

</dom-module> 
+0

不工作。複選框始終標記爲設置「checked =」{{checked}}「'屬性。請注意,我的布爾值只是一個字符串(來自Ruby)而不是'{{binding}}'。這有什麼區別嗎? – Frexuz

+0

嗯......我在本地測試它,它工作正常。只要您只初始化屬性,Ruby中的布爾值就可以。您不會從Polymer的數據綁定中獲益,但您似乎手動處理綁定。可能嘗試在'checked'上設置'reflectToAttribute'和/或'notify'屬性來傳播更改。請參閱https://www.polymer-project.org/1.0/docs/devguide/properties.html#attribute-reflection – Ricky