CanJS / JavascriptMVC:如何在变量中存储视图模板

时间:2012-09-26 05:55:19

标签: javascript jquery canjs canjs-view

是否可以在javascript变量中定义视图模板,而不是脚本标记或文件?

这样的事情:

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

2 个答案:

答案 0 :(得分:4)

好的,经过大量的研究,因为它没有写在文档中,我发现了如何做到这一点。 诀窍是你必须先用id注册你的模板。 如果您使用脚本标记或网址来查找模板,则此步骤由canJS自动完成。

因此,如果要渲染存储在变量中的模板,则必须执行以下操作:

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

现在您在rendered中有文档片段。

答案 1 :(得分:1)

看看jquery utils字符串格式plugin。有一个示例显示了从模板中呈现的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>'
]);

渲染:

$.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');
    });
});