fetch()的奇怪行为

时间:2015-04-05 18:24:45

标签: meteor

在集成Meteor预先存储库时,我遇到了一些奇怪的事情。请参阅以下代码

if (Meteor.isClient) {
  Template.registerHelper("course_data", function() {
    return [
      {
        name: 'course-info1',
        valueKey: 'titleLong',
        local: function() { 
          return Courses.find().fetch();
        },
        template: 'Course'
      },
      {
        name: 'course-info2',
        valueKey: 'catalog',
        local: function() { 
          return Courses.find().fetch();
        },
        template: 'Course'
      },
      {
        name: 'course-info3',
        valueKey: 'catalogNbr',
        local: function() { 
          return Courses.find().fetch();
        },
        template: 'Course'
      }

这很有效,但我发现该网站遭受了开销。我认为原因的一部分依赖于上面的代码,因为我不必要地调用fetch()三次以获得相同的对象。因此,我用Courses.find().fetch()替换了每个courses

if (Meteor.isClient) {
  Template.registerHelper("course_data", function() {
    var courses = Courses.find().fetch();
    return [
      {
        name: 'course-info1',
        valueKey: 'titleLong',
        local: function() { 
          return courses;
        },
        template: 'Course'
      },
      {
        name: 'course-info2',
        valueKey: 'catalog',
        local: function() { 
          return courses;
        },
        template: 'Course'
      },
      {
        name: 'course-info3',
        valueKey: 'catalogNbr',
        local: function() { 
          return courses;
        },
        template: 'Course'
      }

我认为这几乎是相同的代码,但它不再起作用了。似乎没有正确获取对象。我在这里缺少什么吗?

可能相关:Waiting for meteor collection to finish before next step

1 个答案:

答案 0 :(得分:0)

尝试:

local: courses,

而不是:

local: function() { 
    return courses;
},

可能函数的返回而不是值正在干扰反应评估机制。