Как зарегистрировать предварительно скомпилированные шаблоны в Can.js

Я использую can.js и пытаюсь предварительно скомпилировать и загрузить шаблоны. Я взял свои шаблоны и предварительно скомпилировал их с помощью can-compile, а затем загрузил их в получившийся скрипт. файл так:

(function(window) {
    can.Mustache('block_tpl.mustache', '<template string goes here>');
}(this));

Я не думаю, что вы регистрируете его через «can.Mustache»? Кто-нибудь знает, как вы регистрируете предварительно скомпилированные шаблоны с помощью can.js?

Редактировать:

@Daff, когда я использую can.Mustache (кстати, я использую can.jquery), я обнаруживаю, что (а) can.mustache не определено, и (б), если, например, я наберу:

can.Mustache('jim_tpl', "<p>My name is Jim</p>");

...что когда дело доходит до конструктора Mustache:

var Mustache = function(options, helpers) {
            if (this.constructor !== Mustache) {
                var mustache = new Mustache(options);
                return function(data, options) {
                    return mustache.render(data, options);
                };
            }
            if (typeof options === "function") {
                this.template = {fn: options};
                return;
            }
            can.extend(this, options);
            this.template = this.scanner.scan(this.text, this.name);
        };

...там, где он создает новый Ус (стр. 3), он передает имя шаблона в качестве параметра arg. К тому времени, когда вы передадите его сканеру, fn в нижней части «параметров», которая была строкой имени шаблона, теперь становится объектом, каждое свойство которого представляет собой одну букву этой строки...


person user1775718    schedule 30.11.2014    source источник


Ответы (2)


Мы по-прежнему используем CanJS 2.0.7 и предварительно компилируем наши шаблоны с помощью can.view.mustache().

См.: https://github.com/reciprocity/ggrc-core/blob/develop/src/ggrc/assets/javascripts/application.js#L1490

person air_hadoken    schedule 09.12.2014
comment
Спасибо, кажется, это ответ для ‹ 2.1.0 (и я отмечу его как таковой). Одна вещь, хотя - я загрузил один файл сценария, и он поместил предварительно скомпилированные функции в can.view.cached, но когда я ссылаюсь на имя, кажется, что он ищет их с помощью ajax! Любая подсказка, почему? - person user1775718; 09.12.2014
comment
Убедитесь, что вы используете can.view.toId, чтобы превратить ваш путь в подчеркнутое значение при предварительной компиляции представления. Например: - person air_hadoken; 09.12.2014
comment
can.view.toId(/static/mustache/foo.mustache); ››› static_mustache_foo_mustache - person air_hadoken; 09.12.2014

Вот как вы предварительно регистрируете представление, как указано в документации:

Если передаются два аргумента, первый аргумент — это идентификатор шаблона, который будет зарегистрирован с помощью can.view.

Вы можете использовать как can.mustache, так и can.Mustache в верхнем регистре. Вы сталкиваетесь с какими-либо проблемами?

person Daff    schedule 01.12.2014
comment
Привет, Дафф, я ответил тебе на вопрос выше... :) - person user1775718; 06.12.2014
comment
Какую версию ты используешь? - person Daff; 07.12.2014