2013-07-31 1 views
3

Скажут, у меня есть шаблон рулей вроде этого:Рули шаблонов, контекстный доступ переменных со строкой ключа

 <script id="entry-template" type="text/x-handlebars-template"> 
     <div class="entry"> 
      <h1>{{i18n.title}}</h1> 
     </div> 
     </script> 

То, что я действительно хотел бы сделать что-то вроде этого:

var source = $("#entry-template").html(); 
var template = Handlebars.compile(source); 
var context = {"title.t":"My New Post"} 
console.log(template(context)); 

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

var context = { 
    i18n:{ 
     title:'test' 
    } 
} 

Но потому, что я получу 118n строки из внешнего источника, было бы проще просто использовать их в качестве ключей. А, да, я знаю такие проекты, как i18n.js, но актуальный вопрос: могу ли я использовать строковый ключ в объекте контекста с точками в нем, и если да, то как я могу получить к ним доступ из шаблона руля?

ответ

0

Нет, вы не можете использовать ключи с точками в них. Это потому, что они являются частью синтаксиса. Если бы вы могли использовать точки, то как бы вы могли получить доступ к дочерним элементам этого элемента? Вместо точек используйте подчеркивание или тире. Это стандартное уважение людей, потому что оно не содержит ошибок и другого странного поведения.

+0

Итак, вы говорите, что лучше всего принести небольшой помощник ручек, который заменяет. с _? – Christian

+0

Нет. Не создавайте помощника для этого, потому что ключ будет интерпретироваться с помощью '.' в нем. Если вы передадите ему строку, вам удастся ее заменить, но у вас возникнут проблемы с использованием помощника. Я говорю, что у вас уже есть ключи без «.», Откуда вы их получите. – ep0

+0

это худшее решение, с которым я могу придумать, но если это единственный ... Думаю, мне нужно немного больше внимания. Спасибо, в любом случае. – Christian

1

Старый вопрос, но я все еще хочу опубликовать то, что я узнал.

Если ключ к вашей паре ключей: значение представлен в виде строки, вы можете поместить ее в свой шаблонный шаблон.

Так что, если ваш контекст:

var context = { 
    "key":"value" 
} 

В противоположность этому:

var context = { 
    key: "value" 
} 

Вы можете сделать это в шаблоне, чтобы показать значение:

<p>{{"key"}}</p> 

Итак, handlebars будет обрабатывать его как имя свойства и отображать значение.

Пример:

var names = { 
    "first": "John", 
    "last": "Doe" 
} 
<script id="names-template" type="text/x-handlebars-template"> 
<p>First Name: {{"first"}}</p> 
</script> 

Выведет:

Имя: Джон

Это уважает пробелы и другие символы в ваших ключевых строк, мы протестировали его, и он работает с точками внутри вашей строки тоже. Попробуйте и дайте мне знать.

Смежные вопросы