0

我正在尝试更改 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 命令触发了 movies 函数再次渲染,从而导致了无限循环。我应该如何解决这个问题?放置确定位置函数的正确位置在哪里?

4

2 回答 2

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

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

于 2013-07-02T14:25:05.073 回答
1

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

 Meteor.startup(function() {
   // do the updating part
 });
于 2012-08-23T03:06:07.603 回答