JsRender: использование оператора if, сравнивающего значения в объекте JSON с внешней переменной

В моем шаблоне JsRender я хочу отфильтровать объект json, чтобы отображались только те записи, которые соответствуют определенным критериям — например, родительскому идентификатору, который является переменной, которая инициализируется непосредственно перед выполнением рендеринга.

То, что я хотел бы сделать, показано ниже, но вторая строка синтаксиса — это всего лишь предположение. Как это сделать?

<script id="tmpl_report_entry_table_data_rows" type="text/x-jsrender">
{{if ENTRY_ID==n_current_entry_id_from_external_variable}}
<tr class="attribute_data_row">
    <td class="entry_id attribute_data"><span>{{:ENTRY_ID}}</span></td>
    <td class="attribute_1 attribute_data hidden"><span>{{:ATTRIBUTE__1}}</span></td>
    <td class="attribute_2 attribute_data"><span>{{:ATTRIBUTE__2}}</span></td>
    <td class="attribute_14 attribute_data"><span>{{:ATTRIBUTE__14}}</span></td>
    <td class="attribute_13 attribute_data"><span>{{:ATTRIBUTE__13}}</span></td>
    <td class="attribute_11 attribute_date attribute_data"><span>{{:ATTRIBUTE__11}}</span></td>
    <td class="attribute_11 attribute_date_hidden"><span>{{:ATTRIBUTE__11}}</span></td>
    <td class="attribute_3 attribute_data"><span>{{:ATTRIBUTE__3}}</span></td>
    <td class="attribute_4 attribute_data"><span>{{:ATTRIBUTE__4}}</span></td>
    <td class="attribute_5 attribute_data">
        <a href="?"><span>{{:ATTRIBUTE__5}}</span></a>
    </td>
    <td class="cmd"></td>
</tr>    
{{/if}}
</script>

<script>
var obj_my_data = [
    {"ENTRY_ID":79,
        "test":true,
        "ATTRIBUTE__1":"Aleutian Islands",
        "ATTRIBUTE__2":"Arrowtooth Flounder",
        "ATTRIBUTE__13":"BSAI trawl limited access",
        "ATTRIBUTE__3":"Open",
    "ATTRIBUTE__4":"TAC",
    "ATTRIBUTE__5":"",
    "ATTRIBUTE__11":",",
    "ATTRIBUTE__14":"Entire GOA"},
    {"ENTRY_ID":80,
    "test":true,
    "ATTRIBUTE__1":"Aleutian Islands",
    "ATTRIBUTE__2":"Atka Macherel",
    "ATTRIBUTE__13":"BSAI trawl limited access",
    "ATTRIBUTE__3":"Open",
    "ATTRIBUTE__4":"TAC",
    "ATTRIBUTE__5":"",
    "ATTRIBUTE__11":",",
    "ATTRIBUTE__14":"Entire GOA"}
];

$(document).ready(function(){  
    $("table tbody").append($("#my_template").render(obj_my_data)); 
});
</script>

person Octavient    schedule 04.07.2012    source источник


Ответы (2)


Хотя вы можете изменить свои данные, чтобы они содержали текущий идентификатор строки, обычно так же просто (и чище) «параметризировать» шаблон, передавая параметры с помощью метода рендеринга. Вы можете сделать это, передав дополнительный параметр контекста. Он может содержать как параметры, так и вспомогательные функции, которые вы можете передавать динамически только для рендеринга этого шаблона...

$("#my_template").render(myData, {currentRowId: myCurrIdVar}));

Затем вы можете получить доступ к этим именованным параметрам из шаблона (или из вложенных шаблонов) так же, как вы бы получили доступ к зарегистрированному помощнику — добавив «~» к имени.

{{if ENTRY_ID==~currentRowId}}
    ...
{{/if}}

Я добавил новый демонстрационный образец на GitHub показывая это.

person BorisMoore    schedule 05.07.2012

Вы можете просто присвоить текущее значение строки свойству объекта данных...

$(document).ready(function(){
    obj_my_data.currentRow = n_current_entry_id_from_external_variable;
    $("table tbody").append($("#my_template").render(obj_my_data)); 
});

Затем ваш шаблон может проверить это свойство.

<script id="tmpl_report_entry_table_data_rows" type="text/x-jsrender">
    {{if ENTRY_ID == currentRow}}
    // remaining template. 
person Amith George    schedule 04.07.2012