2015-02-08 2 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

Смежные вопросы