我使用Raphael和Mapael创建了一张美国地图,上面有全国各地不同学校的分数。
现在功能很好,如果我只有一些点,但是当我添加所有点(大约60)后,当我点击不同的图例按钮将点分类到不同的分区时,它会慢下来。
我需要重做一些点击事件代码,让它在使用meteor的同时进行排序,这些是我的点击事件:
Template.map.events({
'click .division1': function(event,tmp){
if(event.currentTarget){
var plot = Session.get('propertyMap');
_.each(plot,function(data, key){
if(data.type !== 'D1'){
var deletedPlots = [key];
var updatedOptions = [];
var newPlots = {};
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
else if(data.type === 'D1'){
var deletedPlots = [key];
var updatedOptions = [];
var newPlots = {};
newPlots[key] = data;
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
});
}
},
'click .division2': function(event,tmp){
if(event.currentTarget){
var plot = Session.get('propertyMap');
_.each(plot,function(data, key){
if(data.type !== 'D2'){
var deletedPlots = [key];
var updatedOptions = [];
var newPlots = {};
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
else if(data.type === 'D2'){
var newPlots = {};
newPlots[key] = data;
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
});
}
},
'click .division3': function(event,tmp){
if(event.currentTarget){
var plot = Session.get('propertyMap');
_.each(plot,function(data, key){
if(data.type !== 'D3'){
var deletedPlots = [key];
var updatedOptions = [];
var newPlots = [];
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
else if(data.type === 'D3'){
var newPlots = {};
newPlots[key] = data;
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
});
}
},
'click .AllProperties': function(event,tmp){
event.preventDefault();
if(event.currentTarget){
var deletedPlots = [];
var updatedOptions = [];
var newPlots = Session.get('propertyMap');
tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
}
}
我在embassyofrock.com上也有最新版本。
我的问题是,是否有人知道为什么需要额外的几秒钟来对图表进行排序,以及是否有解决方案使其运行得更快?您可能会注意到,点击所有学校会立即重新添加这些图表,这也是我希望其他人做的事情。
答案 0 :(得分:0)
我对Raphael和Mapael并不熟悉,但我在你的代码中看到很多迭代,你似乎使用了本地数组变量。
如果您从流星出版物以外的其他地方加载项目,则应尝试使用minimongo本地收藏来存储您的积分及其相关数据。
您可以这样声明:
var Plots = new Meteor.Collection(null);
并填写如下:
for (var i = 0; i < plotList.length; i++) {
Plots .insert(plotList[i]);
}
然后,您将能够使用mongo命令更新所有内容,我认为它应该更快。
如果您使用的是流星出版物,则表示您已拥有原始集合的本地版本,您应该直接使用它。