2015-07-11 171 views
0

我從jQuery的模板JsRender遷移,我不知道如何充分轉化的{{each}}{{for}}自定義變量與JsRender

使用jQuery的模板,我可以做這樣的事情:

{{each (i, val) object.items}} 
    <span data-index="${i}">${val}</span> 
{{/each}} 

哪裏object.items是值的陣列,我可以定義定製indexitem變量來顯示數據(在這種情況下ival)。但我如何在JsRender中做同樣的事情?

{{for object.items}} 
    <span data-index="{{:#index}}">{{:#data}}</span> 
{{/for}} 

我知道indexdata在那裏展現如jQuery模板同樣的事情,但我怎麼可以自定義變量?這甚至有可能嗎?

UPDATE:原因是爲我正在使用的變量提供一些上下文。讓我和實例講解(jQuery的TMPL)

{{each (r, row) object.rows}} 
    {{each (c, col) object.cols}} 
     //work with both index and item knowing which one is which 
    {{/each}} 
{{/each}} 

就是這種語法/邏輯可能與你的引擎?

回答

0

您可以創建數據項自定義變量(在jQuery的相當於val模板版本),如下所示:

{{for object.items itemVar='~val'}} 
    <span>{{:~val}}</span> 
{{/for}} 

目前名爲index變量定製沒有的功能。 (可以想象使用語法{{for object.items itemVar='~val' indexVar='~i'}}添加支持 - 但目前尚未實現)。

但是,如果你的理由爲希望提供#INDEX自定義變量,以使其可嵌套塊範圍,你可以自定義一個變量#index在嵌套的標籤,如下所示:

{{for object.items itemVar='~val'}} 
    {{someNestedTag ~i=#index}} 
     <span data-index="{{:~i}}">{{:~val}}</span> 
    {{/someNestedTag}} 
{{/for}} 

現在採取的具體情況:

{{each (r, row) object.rows}} 
    {{each (c, col) object.cols}} 
     //work with both index and item knowing which one is which 
    {{/each}} 
{{/each}} 

這裏有一種方法做,在JsRender/JsViews:

{{for grid.rows ~grid=grid}} 
    {{for ~grid.cols ~rowIndex=#index ~row=#data}} 
    Row {{:~rowIndex}} {{:~row.rowProp}} 
    Col: {{:#index}} {{:colProp}} 
    {{/for}} 
{{/for}} 

如果你想使用數據鏈接,與JsViews,你反而會寫上:

{^{for grid.rows ~grid=grid}} 
    {^{for ~grid.cols ^~rowIndex=#index ~row=#data}} 
    Row {^{:~rowIndex}} {^{:~row.rowProp}} 
    Col: {^{:#index}} {^{:colProp}} 
    {{/for}} 
{{/for}} 

注意,在JsViews版本,因爲我要的〜rowIndex位置動態地通過更新數據綁定時前面的行被刪除,我使用語法^~rowIndex - 這是一個選擇進入數據綁定。 ~rowIndex將最初呈現正確,但不會更新行時刪除...

你可以看到它

而且出於利益考慮,也見這裏使用自定義網格視圖標籤:

附加說明:針對以下評論 「?爲什麼不與{{爲(指數,項目)對象}}語法繼續」

在JsRender你可以很容易地創建自定義標籤,和所有的標籤都有一個共同的結構:http://www.jsviews.com/#tags{{myTag爲arg0 ARG1 namedProp1 = XXX namedProp2 = YYY}} ... {{/ myTag}}使用命名參數(道具)和未命名參數(參數)。

所以itemVar =「〜VAL」任何標籤作品甚至是自定義標籤(不只是{{了...}}),使用一個名爲參數的標準語法,並允許您創建與模板塊(或塊)的數據項對應的上下文模板參數(幫助參數)。

另外在JsRender中,(表達式)語法已經具有arg的含義。例如,{{for(1 + 2)}} {{:}} {{/ for}}將輸出!

在jQuery的模板,還有自定義標籤的支持,以及(I,VAL)語法是特例,對於{{每個}}標籤。

在常見的情況是,你不需要自定義變量名和jQuery的模板語法:

{{each (i, val) object.items}} 
    <span data-index="${i}">${val}</span> 
{{/each}} 

是(我會說)略高於JsRender一個更復雜的:

{{for object.items}} 
    <span data-index="{{:#index}}">{{:}}</span> 
{{/for}} 
+0

謝謝鮑里斯!在附註中,爲什麼不繼續使用'{{for(index,item)對象}}'語法?我認爲寫'itemVar ='〜val''這樣的東西並不像使用jQuery模板那麼簡單,更不用說前面的'〜'字符。 –

+0

我在語法上添加了背景,對我上面的答案... – BorisMoore

+0

我已經更新了我的答案,以便清楚我後面的內容 –