2012-08-23 76 views
0

我试图改变一个集合的属性,让他们在呈现前的绝对位置。如果该项目是集合中的第一个,则会给出0的顶部和左边的0。其次是顶部为0,左边为20等。但是,当我尝试将此逻辑构建到我的模板中时,它会导致无限循环。这里是我的代码:流星无限循环

if (Meteor.is_client) { 

    _.extend(Template.movies, { 

    movies: function() { 
     var movies = Movies.find({}, {sort: {name: 1}}); 

     var determineLocation = function(){ 
     console.log('hello'); 

      var count = 0; 

      movies.forEach(function(movie){ 
       // do some math 
       Movies.update(movie._id, {$set: {left: 10, top: 20}}); 
       count++; 
      }); 
      }; 

     determineLocation(); 

     return movies; 
    } 
    }); 
}; 

我认为它这样做,因为Movies.update命令触发短片功能再次进行渲染,从而导致无限循环。我应该如何解决这个问题?在哪里放置determinLocation函数的适当位置?

+0

另外我一直在写博客,遇到无限循环的情况,我分离了渲染,看看doctormehmet dot blogspot dot com,如果你认为它可能有帮助。我不使用启动,而是使用autorun,但情况有点不同。 – DrM

回答

1

您希望此代码在客户端第一次加载时运行一次吗?我认为Meteor.startup调用合适的:

Meteor.startup(function() { 
    // do the updating part 
}); 
1

把您的流星扩展的启动流星启动函数中:

Meteor.startup(function(){ 
if (Meteor.is_client) { 

    _.extend(Template.movies, { 

    movies: function() { 
    var movies = Movies.find({}, {sort: {name: 1}}); 

    var determineLocation = function(){ 
    console.log('hello'); 

    var count = 0; 

    movies.forEach(function(movie){ 
      // do some math 
      Movies.update(movie._id, {$set: {left: 10, top: 20}}); 
      count++; 
     }); 
     }; 

     determineLocation(); 

     return movies; 
    } 
    }); 
}; 

的初创公司都或多或少的合并,让您无后顾之忧。