首页 > 解决方案 > Meteor 如何将一个模板助手调用到另一个助手中?

问题描述

我如何将一个模板助手访问到另一个。我有 2 个模板

  1. 右侧边栏路径是

app\client\templates\shared\sidebar

  1. my_trb 路径是

app\client\templates\pages\my_trb

my_trb页面上,我显示了我帐户中所有添加的成员的列表,以及我需要在侧边栏助手中调用的相同内容。那么有没有办法将my_trb模板助手调用到侧边栏中?这是帮手my_trb

Template.MyTribes.helpers({

  'myTrb' () {
    let tribIOwn = Meteor.user().trb_i_own; 
    let trb = [];
    tribIOwn.forEach(function (t) {
      trb.push(Trb.findOne({_id: t}));
    });
    return trb;
  },

});

这是tribes_controller.js 的完整代码

TrbController = RouteController.extend({

  subscriptions: function() {
    this.subscribe('users').wait();
    this.subscribe('trb', this.params._id).wait();
  },

  waitOn: function () {
    this.subscribe('trb',Meteor.userId());
    this.subscribe('tribeArgs', this.params._id);
  },


  data: function () {
    return Trb.findOne({_id: this.params._id});
  },

  // You can provide any of the hook options

  onRun: function () {
    this.next();
  },
  onRerun: function () {
    this.next();
  },

  //onBeforeAction: function () {
  //  this.next();
  //},
  onBeforeAction: function () {
    if (!Meteor.userId()) {
      this.render('Splash');
    } else {
      if (!Meteor.user().username) {
        this.render('AddUsername');
      } else {
        this.next();
      }
    }
  },


  action: function () {
    this.render();
  },
  onAfterAction: function () {
  },
  onStop: function () {
  },
  editTribe: function () {
    this.render('EditTribe');
  }
});

标签: meteormeteor-blaze

解决方案


对于需要由多个模板访问的公共/共享代码,使用Template.registerHelper定义一个全局帮助程序是有意义的。

对于您的助手,这将如下所示:

app\client\templates\shared\helpers

// import { Trb } from ....

Template.registerHelpers('myTrb', function myTrb () {
  const user = Meteor.user();
  if (! user) return [];
  const tribIOwn = user.trb_i_own; 
  const trb = [];
  tribIOwn.forEach(function (t) {
    trb.push(Trb.findOne({_id: t}));
  });
  return trb
})

(注意,我改变了一点,因为Meteor.user().trb_i_own如果没有登录用户会崩溃。)

现在您可以删除my_trb模板上的帮助程序,my_trb并从侧边栏调用它。


推荐阅读