我想動態地設置過濾器。可能嗎?是否可以動態設置聚合物表達式?
dynamicFilter是一個名稱爲Polymer表達式的變量。
<template is="auto-binding">
<span>{{value | dynamicFilter}}</span>
</template>
我想動態地設置過濾器。可能嗎?是否可以動態設置聚合物表達式?
dynamicFilter是一個名稱爲Polymer表達式的變量。
<template is="auto-binding">
<span>{{value | dynamicFilter}}</span>
</template>
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-element
的dynamicFilter
屬性,即使在運行時。
原因是filters
在元素初始化期間被編譯和綁定;出於安全原因,後面沒有eval
,因此您不能簡單地在那裏傳遞任意動態值。另一方面,過濾器已經準備好接收參數,而這個事實實際上也有訣竅。順便說一句,如果你對PolymerExpression
不滿意,你甚至可能會在那裏傳遞函數實例。
您的用例並不十分清楚,但您可以使用this.injectBoundHTML作爲解決方法。 當您需要動態更改過濾器時,只需重新輸入範圍的內容
只要您需要將任何與模板相關的數據傳遞到過濾器,此方法就無法工作。也就是說,這個過濾器是用在'template repeat'或類似的內部。 – mudasobwa 2015-02-09 16:43:58