Meteor.js中UI.dynamic模板的助手

时间:2014-07-13 03:21:45

标签: javascript node.js meteor meteor-blaze

在Meteor v0.8.2中,似乎必须为动态模板调用的各个模板(Template.story_enTemplate.story_ne)创建帮助程序。

是否可以仅为动态模板(Template.story)创建帮助程序,并避免为动态模板可以使用的所有可能模板重复它,例如下面的示例?看来,我使用的方法需要大量重复的代码。

story.html

<template name="story">
    {{> UI.dynamic template=storyTemplate}}
</template>

story.js

Template.story.storyTemplate = function() {
    return "story_" + Session.get('lang')
}


// This does not work
Template.story.color = function() {
    return '#f00'
}


// This works
Template.story_en.color = function() {
    return '#f00'
}

// This works (but seems to be unnecessary code)
Template.story_ne.color = function() {
    return '#f00'
}

1 个答案:

答案 0 :(得分:1)

您可以使用全局帮助程序,或将帮助程序作为数据传递

使用全球助手(适用于您拥有的每个模板)

UI.registerHelper("color", function() {
    return '#f00'
});

或者将帮助程序作为数据传递(在当前版本的铁路由器 - open bug下无效)。

Template.story.helpers({
    dataHelpers: function() {
        var data = UI._templateInstance().data || {};

        //Add the helpers onto the existing data (if any)
        _(data).extend({
            color: function() {
                return "#f00";
            }
        });

        return data;

    });
});

然后是html:

<template name="story">
    {{> UI.dynamic template=storyTemplate data=dataHelpers}}
</template>

然后在子模板中,您可以使用{{color}}而不需要帮助程序。

如果您遇到铁路由器问题,也可以尝试使用this代替UI._remplateInstance.data