如何在ractivejs模板中调用数组过滤器

时间:2014-09-23 16:11:07

标签: ractivejs

所以我不想使用数据函数(假设我希望最终用户只与模板交互而不是硬编码javascript。) 如果我有 n 元素的这个数组,我如何过滤它,以便我可以在ractive模板中获得 m 元素?现在我有code>> http://jsfiddle.net/t168vymw/4/无法正常工作。

要求: 我不能使用某些功能来过滤,比如 data: {filtersomething: function(){...} } 但相反,让用户使用模板中的复杂数组函数转换。 是否有支持这个呢?

2 个答案:

答案 0 :(得分:1)

如果你想从用户那里打开任意js,那么你可以这样做(http://jsfiddle.net/h7ut7cbx/2/):

<input value='{{filter}}'>
<br>
{{# filtered }}
    {{.}}<br>
{{/ }}

data: {
    a: [1,2,3,4,5,6],
    filter: 'b%2'
},
computed: {
    filtered: function(a, filter){
        var fn = new Function('b', 'return ' + (this.get('filter')||'true') + ';')
        return this.get('a').filter(fn)
    }
}

答案 1 :(得分:0)

Ractive不支持任何涉及function关键字内部表达式的内容,但有3种方法可以执行此操作:

  • 数据功能,
  • 方法调用(从模板内部调用ractive实例的方法),
  • 直接在模板中过滤数据。

你说你希望所有的逻辑都在模板中,这样我们就可以选择#3了。例如,如果您只想显示列表中的偶数,则可以执行以下操作:

{{ #a }}
    {{ #!(this % 2) }}
        {{ this }}
    {{/}}
{{ /a }}

然而,这通常被认为是反模式。允许用户编写自定义JS或为他们提供可在模板中使用的一些准备好的函数可能是一个更好的主意。