Meteor:模板助手中的例外情况不会消失

时间:2015-08-27 15:19:32

标签: javascript meteor

我的应用中的侧边栏出现以下错误。

  

模板助手中的异常:TypeError:无法读取未定义的属性'org'       at Object.Template.sidebar.helpers.orgUsers(http://localhost:3000/client/templates/includes/sidebar.js?85f4645305c91378ab2c0648488f2250753e8c70:3:29)       在bindDataContext(http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:2786:16)       在Blaze._wrapCatchingExceptions(http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:1607:16)       在http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:2834:66       在Function.Template._withTemplateInstanceFunc(http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:3382:12)       at wrapHelper(http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:2833:27)       at Object.Spacebars.call(http://localhost:3000/packages/spacebars.js?7bafbe05ec09b6bbb6a3b276537e4995ab298a2f:172:18)       在http://localhost:3000/client/templates/includes/template.sidebar.js?85456dfc1ce0f189b2d312b2422db8a2e35f337e:15:22       在null。 (http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:2583:27)       在http://localhost:3000/packages/blaze.js?4e49999979a58da0e2265f7bd3f5910f9901b07b:1821:18

侧边栏应显示特定于组织(anization)的用户列表。发送用户的助手如下:

Template.sidebar.helpers({
  orgUsers : function() {
    var org_id = Meteor.user().org._id;

    var users = Meteor.users.find({
        "org._id" : org_id
    });
    return users;
  }
});

我在这里发布了user.org:

Meteor.publish("userData", function() {
    if (this.userId) {
        return Meteor.users.find({_id: this.userId},
            {fields: {'org._id': 1, 'org.active' : 1, 'emails.[0].address': 1, 'profile.name': 1, 'createdAt':1}});
    } else {
        this.ready();
    }   
});

目前我正在使用Iron Router将其发布到每个页面。似乎帮助程序运行了几次,并且前几次它没有org_id和org._id,但最终得到它并显示。虽然我每次刷新页面都会遇到这个令人讨厌的控制台错误。非常感谢任何帮助。

路由器:

Router.configure({
layoutTemplate : 'layout',
loadingTemplate : 'loading',
notFoundTemplate : 'notFound',
waitOn : function() {
    return [ 
        Meteor.subscribe('orgUsers'),
        Meteor.subscribe('appointments'), 
        Meteor.subscribe('allServicesData'), 
        Meteor.subscribe('allOrgsData'), 
        Meteor.subscribe('userData'), 

    ];
}

});

1 个答案:

答案 0 :(得分:0)

在用户对象可用之前,您的助手正在运行。您可以使用铁路由器 waitOn 订阅(推荐方法)到 userData ,或者您可以在防御方面为您的助手编码:

Template.sidebar.helpers({
  orgUsers : function() {
    if ( Meteor.user() ){
      var org_id = Meteor.user().org._id;

      var users = Meteor.users.find({
        "org._id" : org_id
      });
      return users;
    }
  }
});