jsrender 中的自定义 If 标签

Custom If tag in 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);
            }
        },
});

但它并没有像我预期的那样工作。需要帮助。

提前致谢。

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

http://www.jsviews.com/#tags and http://www.jsviews.com/#samples/jsr/tags/extend-for or http://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 数据链接...)