代码在页面加载后工作,但不在

时间:2015-07-25 21:20:50

标签: javascript meteor

我正在开发一个内部公司使用的应用程序,我正在发布一个符合“主管”资格的用户列表(使用alanning:roles。)

我还使用useraccounts:bootstrap在注册期间收集每个用户的其他信息,例如他们的主管是谁。

我有一个函数可以返回我需要的信息,但它只有在我加载网站后在浏览器控制台中运行它时才有效。

如果我手动构建数组并返回它,一切都按预期工作。当然,重点是这应该是动态的,随着用户群的增长而增长。

关于我所知道的是代码没有在我认为的上下文/顺序中运行。我尝试了各种不同的事情,看看将routes.js移动到/lib(来自/client),将函数定义移动到另一个文件中会发生什么等等!

我该如何纠正?我对Meteor很新,所以我完全有可能犯了一些其他巨大的错误,而我遇到的这个困难只是一个症状。如果是这样,请让我知道

/server/publications.js

Meteor.publish('supervisor-list', function() {
  var criteria = {
    roles: {$in: ['supervisor']}
  };
  var options = {
    fields: {
      'profile.firstName': 1
      , 'profile.lastName': 1
    }
  };
  return Meteor.users.find(criteria, options);
});    

/client/routes.js

Router.configure({
  layoutTemplate:     'layout'
  , loadingTemplate:  'loading'
  , notFoundTemplate: '404'
  , waitOn:           function () {
    return [
      Meteor.subscribe('transactions')
      , Meteor.subscribe('supervisor-list')
    ];
  }
  , yieldTemplates:   {
    nav:      {to: 'nav'}
    , footer: {to: 'footer'}
  }
});

/lib/1functions.js

getSupervisors = function () {
  var output = [];
  var supervisors = Meteor.users.find().fetch();

  for (var i = 0; i < supervisors.length; i++) {
    output.push({
      text:    supervisors[i].profile.firstName + ' ' + supervisors[i].profile.lastName
      , value: supervisors[i]._id
    });
  }

  //output = [
  //  {text: 'Person One', value: 'personone'}
  //  , {text: 'Person Two', value: 'persontwo'}
  //  , {text: 'Person Three', value: 'personthree'}
  //];

  return output;
};

/lib/at_config.js

AccountsTemplates.addField({
  _id: 'supervisorEmail'
  , type: 'select'
  , select: getSupervisors()
  , required: true
});

1 个答案:

答案 0 :(得分:0)

查看Meteor docs(向下滚动到&#34;文件加载顺序&#34;)。 /lib/at_config.js之前已加载/lib/functions.js,因此尚未定义getSupervisors

不确定你的代码是如何构造的,所以我不能指出我将如何做到这一点。文档是你的朋友。