Подтвердить что ты не робот

Доступ к корневому контексту в шаблоне Handlebar.js

Есть ли встроенный метод для доступа к корневому контексту в шаблоне Handlebars.js? Большинство помощников добавляют вложенный контекст, и вам нужно писать../перед тем, как переменная в этом контексте будет иметь доступ к ней, но это не очень практично, если у вас много разных, ifs и т.д.

4b9b3361

Ответ 1

Использовать @root. Это находится в handlebars-v2.0.0.js

{{@root.somthing.nested_somthing}}

Ответ 2

нет возможности доступа к корневому контексту шаблона после изменения контекста с циклом (например, каждый) подробнее

Однако есть возможность доступа к предыдущему контексту с помощью '../'

# app/assets/javascript/contents.coffee
body = HandlebarsTemplates['my_hbs_template']({
  view:{
    registryName: 'foo',
    data: {items: {x: 'x'}}
    }
  })

шаблон:

<!-- app/assets/javascript/templates/my_content.hbs -->
<table class="table">
  <tbody>

  {{#each view.data.items}}
    <tr>
      <td>{{@key}}</td>
      <td>
        Hello from {{../view.registryName}}
      </td>
    </tr>
  {{/each}}
  </tbody>
</table>

проверьте http://handlebarsjs.com/#paths для получения дополнительной информации

Ответ 3

Да, я создал один из них http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

В принципе, добавьте этот помощник и bingo {{xRoot}} приведет вас к вершине...

Я всегда передаю свои данные JSON в такие дескрипторы:

{ data: self.data } 

таким образом, код ниже всегда возвращает "данные", когда он видит тэг xRoot и переносит меня в начало

Handlebars.JavaScriptCompiler.prototype.nameLookup = function (parent, name, type) {

    if (name.indexOf("xRoot") === 0) {
        return "data";
    }

    if (/^[0-9]+$/.test(name)) {
        return parent + "[" + name + "]";
    } else if (Handlebars.JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
        return parent + "." + name;
    }
    else {
        return parent + "['" + name + "']";
    }
};

Ответ 4

Пока еще!

Было предложено несколько раз, и есть открытый билет: https://github.com/wycats/handlebars.js/issues/392

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