2015-09-06 4 views
0

Быстрый вопрос: Я использую jsViews для визуализации HTML-шаблона. Я хочу иметь какой-то перевод. В настоящее время мое приложение возвращает глобальную переменную «язык» со значением, которое равно: pl || ru || de.jsViews/jsRender vs rich expressions внутри шаблона

Как использовать глобальную переменную «язык» для сокращения данных в JSON, ответственных за перевод?

1). JSON Данные

var language = [ 
    { 
    "pl": { 
      "prop": "value", 
      "prop": "value" 
    }, 
    "en": { 
      "prop": "value", 
      "prop": "value" 
    }, 
    "de": { 
      "prop": "value", 
      "prop": "value" 
    } 
    } 
]; 

2). Рабочий шаблон HTML, но языковое значение записывается статически

<script type="text/x-jsrender" id="test"> 
    <div> 
     {{props pl}} 
     <span> 
      {{>prop}} 
     </span> 
     {{/props}} 
    </div> 
</script> 

3). Я хочу изменить {{props pl}} на нечто вроде {{props * language}}, чтобы динамически вводить язык в шаблон, но как правильно его записать?

Я знаю, что:

a). $.views.settings.allowCode= true;   
    b). {{*:language}} will return language shortcode 

Так как использовать это выражение внутри {{если}} или {{реквизита}} или {{для}} ??

Благодарим вас заранее!

ответ

1

Использование allowCode = true является лучшим вариантом для случаев, когда вы хотите включить код для операций, которые не достижимы декларативно.

Вы можете комбинировать код и обычные теги, как показано на примерах здесь: http://www.jsviews.com/#allowcodetag;

Но, избегая allowCode, обеспечит лучшую ремонтопригодность и разделение кода.

Если в этом случае, если вы хотите получить доступ к глобальным переменным, вы можете просто передать их или объявить их в качестве помощников: http://www.jsviews.com/#helpers.

Например, вы могли бы сделать:

<input data-link="~options.language" /> 

<div> 
    {^{props words[~options.language]}} 
    <span> 
     {{>prop}} 
    </span> 
    {{/props}} 
</div> 

и

var data = { 
    words: { 
    en: { 
     prop: "value", 
     prop: "value" 
    }, 
    de: { 
     ... 
    }}; 

$.templates("#test").link('#container', data, {options: {language: "en"}}); 

Теперь, если вы измените язык ввода, дисплей реквизита переключится на новый язык.