使用骨干调用下划线模板中的函数

时间:2013-09-23 14:09:57

标签: javascript backbone.js underscore.js

我尝试这样做的事情现在可以简化我的生活。

我该怎么做:

这是我在app文件中的视图

    window.ArtView = Backbone.View.extend({
        template:_.template($('#art').html()),
        render:function (eventName) {
            var output="blablbla";
            $(this.el).html(this.template({"output":output}));
            return this;
        }
    });
    ...
    // function that I would like to call
    function callFunction(){
        console.log('it works!');
    }

index.html中的模板

<script type="text/tempate" id="art">
        <div data-role="header" class="header" data-position="fixed">
            <a href="#" data-icon="back" class="back ui-btn-left">Back</a>
        </div>
        <div data-role="content" class="content">
            callFunction();
            <% console.log(output) %>
        </div>
</script>

如何在我的模板或类似的东西中调用callFunction()?

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:16)

我相信只要模板的对象具有该功能,您就可以调用模板中的函数。

render:function (eventName) {
    var output="blablbla";
    var data = _.extend({"output":output}, callFunction);
    $(this.el).html(this.template(data));
    return this;
}

然后在你的模板中:

<%= callFunction() %>

答案 1 :(得分:5)

这就是我做的,它运作正常。

template: _.template(templateText , {
            imports : {
                check :function (val){
                    // blah blah
                    }
                }
            }
        }),

然后在你的html模板中

<%= check('value') %>

答案 2 :(得分:0)

那是错的。将模板视为字符串,html标记。你得到它并用实际数据替换它的一些部分。如果你想做一些DOM操作,那么应该在那之后进行。让我们知道您在callFunction中想要做什么,我们可以引导您找到适合该逻辑的地方。