2017-03-01 14 views
0

フィルタに応じてGoogleマップマーカーを表示/非表示にする検索フィルタ機能を作成する必要があります。 たとえば、検索フォームに「a」と入力すると、「a」を含むマーカーだけが表示され、もう一方は非表示のままになります。 JSとノックアウトフレームワークを使用しています。 Marker.setVisible(true/false)を使用することを考えていましたが、この機能を実装する方法はわかりません。あなたの助けフィルタリング時にマーカを表示/非表示にするフィルタ機能

var Data = { 
      locations: [ 

      new Location("Palazzo Pitti", 43.765264, 11.250094,"4bc8c9d7af07a593d4aa812d"), 
      new Location("Uffizi Gallery", 43.768439, 11.2559,"51191cdfb0ed67c8fff5610b"), 
      new Location("Florence Cathedral", 43.773083, 11.256222,"4bd00cdb046076b00a576f71"), 
      new Location("Palazzo Vecchio", 43.769315, 11.256174,"4bd01b8077b29c74a0298a82"), 
      new Location("Piazza della Signoria", 43.7684152597, 11.2534589862,"4b81729af964a520a7a630e3"), 
      new Location("Giotto's Campanile", 43.772772, 11.255786,"4b49cd73f964a520d87326e3"), 
      new Location("Piazzale Michelangelo", 43.762462, 11.264897,"4b3276d5f964a520620c25e3"), 
      new Location("Ponte Vecchio", 43.768009, 11.253165,"4b6ed35df964a52038cc2ce3"), 
      new Location("Boboli Gardens", 43.762361, 11.248297,"4bc97abcfb84c9b6f62e1b3e"), 
      new Location("Vinci", 43.783333, 10.916667,"4ca4f0a0965c9c74530dc7fa"), 
      ], 
      query: ko.observable(''), 
     }; 

     // Search by name into the locations list. 
     Data.search = ko.computed(function() { 
     var self = this; 
     var search = this.query().toLowerCase(); 
     return ko.utils.arrayFilter(self.locations, function(location) { 
     return location.title.toLowerCase().indexOf(search) >= 0; 
     });}, Data); 

     ko.applyBindings(Data); 
     } 
+0

私たちは何を期待していますか? –

+0

私はそれに似たものを試していましたが、エラーを返します:var isMatching = location.title.toLowerCase()。indexOf(search)> = 0; if(isMatching){ marker.setVisible(true); } else { marker.setVisible(false); } return isMatching; }); –

+0

配列オブジェクトには.filter関数があります。 –

答えて

0

ため おかげであなたはあなたが必要なものにかなり近いです。場所はko.observableであることを忘れないでください。括弧を使用して開く必要があります。試してみてください:

Data.search = ko.computed(function() { 
    var self = this; 
    var search = this.query().toLowerCase(); 
    return ko.utils.arrayFilter(self.locations, function(location) { 
     if (location.title.toLowerCase().indexOf(search) >= 0) { 
      location.setVisible(true); 
      return true; 
     } 
     else { 
      place.setVisible(false); 
      return false; 
     }    
    }); 
}, Data); // not sure you really need this last reference to Data here 
関連する問題