Использование предварительно скомпилированных шаблонов Handlebars в проекте Ember 2

Мне нужно использовать некоторые предварительно скомпилированные шаблоны рулей в моем проекте ember вместе с моими обычными компонентами и шаблонами. Я загрузил предварительно скомпилированные шаблоны в свой файл ember-cli-build.js, используя app.import(). Предварительно скомпилированные шаблоны теперь отображаются в объекте Handlebars.templates, который я сопоставил с Ember.TEMPLATES["precompiled-template"] в моем файле Ember app.js между объявлением приложения и инициализацией приложения.

Когда я проверяю объект Ember.TEMPLATES, предварительно скомпилированные шаблоны присутствуют как функции формы function(context, options), в отличие от других шаблонов, которые являются объектами.

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

Редактировать 1: я говорю о небольших шаблонах пользовательского интерфейса, а не о всем шаблоне маршрута, и я готов пожертвовать привязками.


person goofiw    schedule 31.03.2016    source источник
comment
Как вы собирали шаблоны? Вы использовали ту же версию ember-template-compiler.js, что и ember.js?   -  person Gaurav    schedule 03.04.2016


Ответы (1)


Я нашел способ использовать помощник для преобразования шаблонов рулей в строку и создания фрагмента документа.

import Ember from 'ember';

export function helper(data/*, hash*/) {
  let precompiledTemplateFunction = Handlebars.templates[data[0]];
  return fragmentFromString(precompiledTemplateFunction());
}

function fragmentFromString(strHTML) {
  return document.createRange().createContextualFragment(strHTML);
}

export default Ember.Helper.helper(helper);

использование: {{helper 'precompiledTemplate'}}

Я импортирую шаблоны в файл ember-cli-build.js app.import('vendor/path/to/precompiled/template');

Я не занимался передачей атрибутов через хелпер, но не думаю, что это будет так сложно.

person goofiw    schedule 06.04.2016