1

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

要求:我不能使用某些函数进行过滤,例如 data: {filtersomething: function(){...} } ,而是让用户从模板中进行复杂的数组函数转换。活跃还支持这一点吗?

4

2 回答 2

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)
    }
}
于 2014-09-23T17:02:19.263 回答
0

Ractive 不支持function在表达式中涉及关键字的任何内容,但有 3 种方法可以做到这一点:

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

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

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

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

于 2014-09-23T16:46:16.180 回答