2016-04-11 42 views
0

我嘗試創建一個自定義標籤contains,該標籤檢查數組中的給定值。自定義如果jsrender中的標籤

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

您正在重寫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數據聯...)