流星无限循环

时间:2012-08-23 02:34:42

标签: javascript node.js meteor

我正在尝试更改Collection的属性,以便在渲染之前为它们提供绝对位置。如果该项目是集合中的第一个,则它的顶部为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命令会触发电影功能再次渲染,从而导致无限循环。我应该怎么解决这个问题?放置determineLocation函数的正确位置在哪里?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

将您的meteor扩展程序放在启动Meteor启动功能中:

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; 
    }
  });
};

初创公司或多或少合并,所以不用担心。