0

コレクションの属性を変更して、レンダリングする前に絶対位置を指定しようとしています。アイテムがコレクションの最初にある場合は、上に 0、左に 0 が割り当てられます。2 番目には上に 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関数を再度レンダリングするようにトリガーし、無限ループが発生するため、これを行っていると思います。これを回避するにはどうすればよいですか?defineLocation 関数を配置する適切な場所はどこですか?

4

2 に答える 2

1

クライアントが最初に読み込まれたときに、このコードを 1 回だけ実行しますか? Meteor.startup電話が適切だと思います:

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