CanJS/JavascriptMVC: Как сохранить шаблон представления в переменной

Можно ли определить шаблон представления в переменной javascript вместо тега сценария или файла?

Что-то вроде этого:

var template = "< h1 ><%= title %> < / h1 >"; 
var rendered = can.view.render(template, data);

2 ответа

Решение

Хорошо, после долгих исследований, потому что это не написано в документации, я нашел, как это сделать. Хитрость в том, что вы должны сначала зарегистрировать свой шаблон с идентификатором. Если вы используете тег сценария или URL для поиска шаблона, этот шаг выполняется автоматически canJS.

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

var template = "< h1 ><%= title %> < / h1 >"; 
can.view.ejs('my-view-id', template);​​​​​​​
var rendered = can.view.render('my-view-id', data);

Теперь у вас есть фрагмент документа в rendered,

Посмотрите на jquery использует плагин формата строки. Есть пример, который показывает рендеринг HTML из шаблона, который был определен как строка.

Создание шаблона:

$.tpl('tweet', [
    '<div id="tweet-{id:s}" class="tweet">',
        '<div class="tweet-body"><b>@{from:s}</b>: {body:s}',
            '(<a href="{href:s}" class="tweet-date">',
                '<abbr title="{timestamp:s}">{timesince:s}</abbr>',
            '</a>)',
        '</div>',
    '</div>'
]);

Rendering:

$.getJSON('/tweets/username/', function(resp, s){
    $.each(resp.tweets, function(idx, tweet) {
        $.tpl('tweet', {
            id: tweet.id,
            body: tweet.body,
            from: tweet.screen_name,
            timestamp: tweet.pub_time,
            timesince: $.timeago(tweet.pub_time)
        }).appendTo('#tweet-list');
    });
});
Другие вопросы по тегам