在模板渲染之前调用助手

时间:2015-03-11 08:44:55

标签: javascript meteor spacebars

我正在建立一个流星项目,我需要保持我的所有收藏品不被反应。所以我删除了订阅和发布。为了显示来自DB的任何信息,我的助手正在调用meteor.call中的方法。但在我的情况下,模板无法显示来自DB的信息,因为模板在从DB返回任何内容之前呈现。任何人都可以建议一种在不使用会话的情况下在模板中显示来自Meteor.call方法的信息的好方法。

这是我的代码。 我的模板代码

    <template name = "showEmployeeFromRouter">
    {{#each allEmployee}}
        <div>
            Name: {{name}}
            <br>
            Org: {{org}}
        </div>
        <br><br>
    {{/each}}
  </template>

帮助程序代码

    Template.showEmployeeFromRouter.helpers({
    allEmployee:function(){
        //return [{name:"AX",org:"XS"},{name:"XS",org:"SE"}];
       Meteor.call('showAllEmployees',function(err,res){
           if(res){
               console.log(res);
               return res;
           }
       });
    }
})

服务器中的代码

Meteor.method({
        showAllEmployees:function(){
        var obj = Employees.find().fetch();
        return obj;
       }
    });

是否有人有正确的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

终于做到了。通过使用反应性var或反应性Dict。 我的模板。

    <template name = "`showEmployeeFromRouter`">
    {{#each allEmployee}}
    <div>
        Name: {{name}}
        <br>
        Org: {{org}}
    </div>
    <br><br>
{{/each}}

我的服务器电话。

Meteor.method({
    showAllEmployees:function(){
    var obj = Employees.find().fetch();
    return obj;
   }
});

最后是我的帮手。

Template.showEmployeeFromRouter.created = function(){
this.state = new ReactiveDict();
var parentInstance = Template.instance();
Meteor.call('showAllEmployees',function(err,res){
       if(res)
    parentInstance.state.set('allEmp',res);
})}

Template.showEmployeeFromRouter.helpers({
allEmployee:function(){
    return Template.instance().state.get('allEmp');
}});

别忘了添加反应词典包。 meteor add reactive-dict