我正在尝试更改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函数的正确位置在哪里?
答案 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;
}
});
};
初创公司或多或少合并,所以不用担心。