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

如何在ractivejs模板中调用数组过滤器,ractivejs,Ractivejs,所以我不想使用数据函数(假设我希望最终用户只与模板交互,而不是硬编码javascript) 如果这个数组有n个元素,我如何过滤它,以便在ractive模板中获得m个元素?现在我有一个>>不能正常工作 要求: 我不能使用一些函数来过滤,比如 数据:{filtersomething:function(){…} 但是,让用户使用模板中的复杂数组函数转换。 ractive还支持这一点吗?ractive不支持表达式中包含函数关键字的任何内容,但有三种方法: 数据功能 方法调用(从模板内部调用ract

所以我不想使用数据函数(假设我希望最终用户只与模板交互,而不是硬编码javascript) 如果这个数组有n个元素,我如何过滤它,以便在ractive模板中获得m个元素?现在我有一个>>不能正常工作

要求: 我不能使用一些函数来过滤,比如

数据:{filtersomething:function(){…}
但是,让用户使用模板中的复杂数组函数转换。
ractive还支持这一点吗?

ractive不支持表达式中包含
函数
关键字的任何内容,但有三种方法:

  • 数据功能
  • 方法调用(从模板内部调用ractive实例的方法)
  • 直接在模板中过滤数据
你说你希望所有的逻辑都在模板中,这样我们就可以选择#3。例如,如果希望仅显示列表中的偶数,可以执行以下操作:

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

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

如果您想向用户的任意JS打开它,那么您可以这样做():


我知道这是一个反模式,在模板中使用javascript有点难看,但这是一个要求,让用户远离js代码。感谢您的帮助。这是一个理想的解决方案,但用户无法编辑Ractive js实例。谢谢你的帮助,他们不需要<代码>过滤器:“b%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)
    }
}