我正在使用拉斐尔和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上也有最新版本。
我的问题是,是否有人知道为什么需要额外的几秒钟来对绘图进行排序,以及是否有解决方案让它运行得更快?您可能会注意到,单击所有学校会立即重新添加图,这也是我希望其他学校也能做的。
发布于 2015-06-18 00:25:29
我对拉斐尔和Mapael并不熟悉,但我在你的代码中看到了很多迭代,而且你似乎是在使用局部数组变量。
如果你从流星出版物以外的其他地方加载你的项目,你应该尝试使用一个minimongo本地集合来存储你的点及其相关数据。
您可以这样声明它:
var Plots = new Meteor.Collection(null);然后像这样填充它:
for (var i = 0; i < plotList.length; i++) {
Plots .insert(plotList[i]);
}然后你就可以使用mongo命令更新所有的东西了,我想它应该会更快。
如果您正在使用meteor publication,这意味着您已经有了原始集合的本地版本,您应该直接使用它。
https://stackoverflow.com/questions/30896494
复制相似问题