2015-02-08 63 views

回答

3

AFAIK,沒有方便的方法在運行時將Filter分配給元素。但有一個簡單的解決方法,您可能會發現有用:

我們將定義staticFilter函數,它將作爲調用dynamicFilter的代理(包裝器)。假設動態過濾器是PolymerExpression情況下,這可能會被放在一起如下:

<polymer-element name="my-element" attributes="dynamicFilter"> 
    <template> 
    <span>{{value | staticFilter(dynamicFilter)}}</span> 
    </template> 
    <script> 
    PolymerExpressions.prototype.uppercase = function(input) { 
     return input.toUpperCase(); 
    }, 
    PolymerExpressions.prototype.lowercase = function(input) { 
     return input.toLowerCase(); 
    }, 

    Polymer({ 
     value: '¡Hola!', 

     dynamicFilter: null, 

     staticFilter: function(v, df) { 
     return df ? PolymerExpressions.prototype[df](v) : v; 
     } 

    }); 
    </script> 
</polymer-element> 
<my-element></my-element> 
<my-element dynamicFilter='uppercase'></my-element> 
<my-element dynamicFilter='lowercase'></my-element> 

現在你可以自由設定的my-elementdynamicFilter屬性,即使在運行時。

原因是filters在元素初始化期間被編譯和綁定;出於安全原因,後面沒有eval,因此您不能簡單地在那裏傳遞任意動態值。另一方面,過濾器已經準備好接收參數,而這個事實實際上也有訣竅。順便說一句,如果你對PolymerExpression不滿意,你甚至可能會在那裏傳遞函數實例。

0

您的用例並不十分清楚,但您可以使用this.injectBoundHTML作爲解決方法。 當您需要動態更改過濾器時,只需重新輸入範圍的內容

+0

只要您需要將任何與模板相關的數據傳遞到過濾器,此方法就無法工作。也就是說,這個過濾器是用在'template repeat'或類似的內部。 – mudasobwa 2015-02-09 16:43:58

相關問題