使用硬编码的标记位置阵列构建Google地图页面。有一个搜索框使用敲除来过滤屏幕上的可见标记。这个想法是,当你在搜索框中输入每个字母时,敲除过滤你在屏幕上看到的标记。这一切都正常,但如果我在搜索框中输入几个字母,然后清除它,所有标记都不会重新出现在屏幕上。我知道这应该是一个简单的条件,但对于我的生活,我无法得到它的工作。 下面是相关代码:knockoutjs Google Maps API显示所有标记
var locations = [
{
title: "Location 1",
latlong: { lat: 25.55555, lng: -80.55555 },
street: "123 Main St",
city: "Anytown, USA 12345",
id: 0,
showLoc: ko.observable(true),
visible: ko.observable(true),
},
{
title: "Location 2",
latlong: { lat: 27.77777, lng: -81.11111 },
street: "456 Main St",
city: "Anytown, USA 12345",
id: 1,
showLoc: ko.observable(true),
visible: ko.observable(true),
}]
//loop to drop markers on map and add marker properties
function createMarkers() {
for (i = 0; i < locations.length; i++) {
locations[i].marker = new google.maps.Marker({
position: locations[i].latlong,
map: map,
title: locations[i].title,
animation: google.maps.Animation.DROP,
id: i
});
}
}
//sets marker visibility
function setMarkerVisibility() {
for (i = 0; i < locations.length; i++) {
locations[i].marker.setVisible(locations[i].visible);
}
}
//knockout viewmodel - handles search locations array and filtering
function AppViewModel() {
query = ko.observable('');
this.locations = ko.computed(function() {
var self = this;
var search = self.query().toLowerCase();
return ko.utils.arrayFilter(locations, function (loc) {
//I've tried adding an || query('') here, or an else if, but no luck
if (loc.title.toLowerCase().indexOf(search) >= 0 || (query(''))) {
loc.showLoc(true);
loc.visible = true;
} else {
loc.showLoc(false);
loc.visible = false;
setMarkerVisibility();
}
});
});
}
我在我的答案中提出了有关查询变量的部分,但现在我看到了setMarkerVisibility()调用,我认为这可能是主要问题。 – MUlferts