Как выбрать шаблон для отображения на основе свойства - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь обновить старый jQuery tmpl до этого потрясающего нового jsRender.

Мой код уже работает.

Я создаю ФОРМУ с шаблонами на основе JSON, возвращенногобэкэнд.

Объект:

var form = {
  name: "addNew",
  fields: [{type: "text", name: "Age"}, {type: "hidden", name: "Id"}] 
};

В старом плагине jQuery я сделал это

'{{tmpl(this.data) selectInputTemplate( this.data )}}'

Где функция selectInputTemplate () вернет шаблонимя основано на типе поля.

Как это будет работать в новом jsRender?


РЕДАКТИРОВАТЬ:

Как получить доступ ко всему объекту? В старом jQuery Template был с this.data .

Я создал вспомогательную функцию, чтобы вернуть мне шаблон, но мне нужно знать, как получить доступ ко всему объекту, чтобы отправить его помощнику.


РЕДАКТИРОВАТЬ 2:

Это ужасно, но работает:

var form_field_wrap =
    "{{if type === 1 tmpl='form_field_input_text' /}}" +
    "{{if type === 2 tmpl='form_field_input_select' /}}" +
    "{{if type === 3 tmpl='form_field_input_checkbox' /}}" +
    "{{if type === 4 tmpl='form_field_input_radios' /}}" +
    "";

1 Ответ

2 голосов
/ 09 октября 2019

В шаблоне вы можете получить доступ ко всему объекту контекстных данных, используя #data.

(см. Пути и выражения )

В вспомогательной функцииОбъект this обычно является текущим объектом view, поэтому вы можете получить объект данных как this.data.

Вот пример, который показывает оба вышеупомянутых метода:

<script id="myTmpl" type="text/x-jsrender">
    {{include tmpl=~getTmpl(#data)/}}
</script>

<div id="page"></div>

<script>
    var myTmpl = $.templates("#myTmpl"),
        data = { name: "Jo" },
        helpers = {
            getTmpl: function(data) {
                return $.templates("{{: 123}}" + data.name + this.data.name);
            }
        },
        html = myTmpl.render(data, helpers);
    $("#page").html(html);
</script>

Кстати, вы можете написать свой пример с помощью тегов {{if}}, подобных этому

"{{if type === 1 tmpl='form_field_input_text'}}" +
"{{else type === 2 tmpl='form_field_input_select'}}" +
"{{else type === 3 tmpl='form_field_input_checkbox'}}" +
"{{else type === 4 tmpl='form_field_input_radios'}}" +
"{{/if}}"
...