2012-08-23 77 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; 
    } 
    }); 
}; 

的初創公司都或多或少的合併,讓您無後顧之憂。