Google maps 用敲除过滤谷歌标记
我一直在努力解决这个问题,但运气不好。我已经查过其他帖子了,运气不好。我想我的代码有一个错误,我的目标是能够过滤列表并只显示/隐藏列表上的标记。下面是代码示例: 以下是由于某种原因无法工作的代码示例:Google maps 用敲除过滤谷歌标记,google-maps,knockout.js,Google Maps,Knockout.js,我一直在努力解决这个问题,但运气不好。我已经查过其他帖子了,运气不好。我想我的代码有一个错误,我的目标是能够过滤列表并只显示/隐藏列表上的标记。下面是代码示例: 以下是由于某种原因无法工作的代码示例: self.filteredPlaces = ko.computed(function() { var filter = self.filter().toLowerCase(); if (!filter) { ko.utils.arrayForEach(self.pl
self.filteredPlaces = ko.computed(function() {
var filter = self.filter().toLowerCase();
if (!filter) {
ko.utils.arrayForEach(self.placeList(), function (placeItem) {
placeItem.marker.setVisible(true);
});
return self.placeList();
} else {
return ko.utils.arrayFilter(self.placeList(), function(placeItem) {
// set all markers visible (false)
var result = (placeItem.city.toLowerCase().search(filter) >= 0);
placeItem.marker.setVisible(result);
return result;
});
}
}, this);
谢谢为了过滤标记,您需要做一些事情 您的第一个问题是这一行:
placeItem.marker.setVisible(true);
Place项没有基于构造函数的标记对象。所以,你必须加上它。我更改了Place构造函数以添加一个marker对象(见下文)
})
并用它来初始化对象。最后,我更改了filteredPlaces函数,它需要订阅可观察的查询,以便在键入文本时,地图上的标记会相应调整
self.query.subscribe(function() {
var filter = self.query().toLowerCase();
if (!filter) {
ko.utils.arrayForEach(self.placeList(), function (placeItem) {
placeItem.marker.setMap(map);
});
return self.placeList();
} else {
ko.utils.arrayForEach(self.placeList(), function(placeItem) {
var result = (placeItem.city.toLowerCase().search(filter) >= 0);
if(result)
placeItem.marker.setMap(map);
else
placeItem.marker.setMap(null);
});
}
});
抛出错误是因为
placeItem
中没有marker
属性,我如何将这些属性赋予“placeItem”您的小提琴中有一个javascript错误:Uncaught TypeError:无法读取未定义的属性“映射”
self.query.subscribe(function() {
var filter = self.query().toLowerCase();
if (!filter) {
ko.utils.arrayForEach(self.placeList(), function (placeItem) {
placeItem.marker.setMap(map);
});
return self.placeList();
} else {
ko.utils.arrayForEach(self.placeList(), function(placeItem) {
var result = (placeItem.city.toLowerCase().search(filter) >= 0);
if(result)
placeItem.marker.setMap(map);
else
placeItem.marker.setMap(null);
});
}
});