流星如何将一个模板助手称为另一个助手?

时间:2018-11-03 10:40:27

标签: meteor meteor-blaze

我如何将一个模板帮助器访问另一个。我有2个模板

  1. 右侧边栏路径为

app\client\templates\shared\sidebar

  1. my_trb路径为

app\client\templates\pages\my_trb

my_trb页面上,我显示了我帐户中所有添加的memebr的列表,我需要在侧边栏助手中调用相同的内容。那么有没有办法将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');
  }
});

1 个答案:

答案 0 :(得分:2)

对于需要由多个模板访问的通用/共享代码,使用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和侧边栏中调用它。