2015-02-06 2 views
0

Есть ли способ в Mustache для обозначения только текущей области?Могу ли я ограничить Усы текущей областью?

{ 
    "name": "name1", 
    "list": [ 
    { 
     "name": "name2", 
     "value": 200 
    }, 
    { 
     "value": 300 
    } 
    ] 
} 

Выход:

  • имя2: 200
  • имя1: 300

Поскольку он ищет предка областей.
Но что мне нужно:

  • name2: 200

Есть ли способ, чтобы избежать столкновения пространства имен, как это?
Я не хочу устанавливать "name": "" в объект, где имя должно быть пустым, так как оно создано динамически.

+0

Хотелось бы что-то вроде '{{[name]}}' где "[]" ограничило бы поиск текущей областью. –

ответ

1

В настоящее время нет способа сделать то, что вы ищете, в совместимых с Усы. Это вовсе не означает, что это не представляется возможным, однако :)

Несколько способов сделать это:

  • Там в a proposed spec extension - иногда называют «привязанного точечную нотацию» - что позволит вам написать {{ .name }} ... это в основном сочетание неявного итератора, {{ . }}, который ссылается на контекст текущего раздела и точечную нотацию, {{ foo.name }}. Обратите внимание, что он не был добавлен ко многим реализациям Mustache, поэтому это может не сработать для вас, в зависимости от вашего вкуса.

  • Если ваша библиотека Mustache реализует любой из the proposed filters specs, вы можете использовать ее для предотвращения проверки контекста родительского раздела. Жизнеспособность этого ответа во многом зависит от вашего языка. В Ruby вы можете сделать это с помощью прокси-сервера, который реализует #method_missing. В PHP вы можете сделать то же самое с __isset и __get ... Here's an example of that in PHP.

  • Но на самом деле самый простой ответ - всегда указывать свойство name в дочерних объектах. Если есть name, и это пустая строка, родительский контекст даже не будет проверен.

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