自定义if标记在jsrender中

时间:2016-04-11 17:03:09

标签: jsrender

我尝试创建一个自定义if标记contains,用于检查数组中的给定值。

jQuery.views.tags({
       contains:{
            baseTag: "if", //no I18n
            init: function(){
                var valueArr = this.tagCtx.args[0];
                var findValue = this.tagCtx.args[1];

                return _.contains(valueArr, findValue);
            }
        },
});

但它没有像我预期的那样奏效。需要帮助。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您正在覆盖init方法。这是你需要覆盖的渲染方法。

请参阅http://www.jsviews.com/#tagshttp://www.jsviews.com/#samples/jsr/tags/extend-forhttp://www.jsviews.com/#samples/tag-controls/range

jQuery.views.tags({
  contains:{
    baseTag: "if",
    render: function(valueArr, findValue) {
      if (valueArr && findValue) {
        // Call the base render method of the {{if}} tag,with the 'contains' result
        return this.base(_.contains(valueArr, findValue));
      }
      return this.base(); // {{else}} tag
    },
    // If using JsViews data-linking - need to override onUpdate too
    onUpdate: function(ev, eventArgs, tagCtxs) {
      return true;
    }
  }
});

用法:

{{contains array1 item1}}
  ...
{{else array2 item2}}
  ...
{{/contains}}

(或{^{contains ...}}如果使用JsViews数据链接......)