gmaps4rails显示隐藏功能

时间:2013-04-23 21:51:33

标签: ruby-on-rails google-maps gmaps4rails

我希望能对gmaps4rails中的show / hide功能有所了解。

example functionality

  // == shows all markers of a particular category, and ensures the checkbox is checked ==
  function show(category) {
    for (var i=0; i<gmarkers.length; i++) {
      if (gmarkers[i].mycategory == category) {
        gmarkers[i].setVisible(true);
      }
    }
    // == check the checkbox ==
    document.getElementById(category+"box").checked = true;
  }

  // == hides all markers of a particular category, and ensures the checkbox is cleared ==
  function hide(category) {
    for (var i=0; i<gmarkers.length; i++) {
      if (gmarkers[i].mycategory == category) {
        gmarkers[i].setVisible(false);
      }
    }
    // == clear the checkbox ==
    document.getElementById(category+"box").checked = false;
    // == close the info window, in case its open on a marker that we just hid
    infowindow.close();
  }

  // == a checkbox has been clicked ==
  function boxclick(box,category) {
    if (box.checked) {
      show(category);
    } else {
      hide(category);
    }
    // == rebuild the side bar
    makeSidebar();
  }

  function myclick(i) {
    google.maps.event.trigger(gmarkers[i],"click");
  }


  // == rebuilds the sidebar to match the markers currently displayed ==
  function makeSidebar() {
    var html = "";
    for (var i=0; i<gmarkers.length; i++) {
      if (gmarkers[i].getVisible()) {
        html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a><br>';
      }
    }
    document.getElementById("side_bar").innerHTML = html;
  }

所以,在我的控制器中,我正在建立一个标记列表,并将它们的类别包括为json。

@markersLoc = @locSearch.to_gmaps4rails do |loc, marker|
  letter.next!
  marker_image = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{letter}|82ABDD|000000"
  marker.infowindow render_to_string(partial: '/events/info', 
                                     locals: {object: loc})
  marker.picture({picture: marker_image,
                  width: 32,
                  height: 32,
                  marker_anchor: [11,30],
                  shadow_picture: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
                  shadow_width: 110,
                  shadow_height: 110,
                  shadow_anchor: [12,34]})
  marker.title loc.what
  marker.sidebar render_to_string(partial: '/events/sidebar', 
                                  locals: {object: loc, letter: marker_image})
  marker.json({cat: loc.category})
end

我有点卡住,在这里。我知道:cat字符串可用(例如:1,3,4),但我不知道如何使用它来实现我所追求的目标。

1 个答案:

答案 0 :(得分:1)

能够通过一些修改几乎使用那里的东西。这给了我9个类别(可能更多或更少)的功能,并且只查看我想要的内容。真棒。

// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
  var regEx = new RegExp("[" + category + "]")
  for (var i=0; i<Gmaps.map.markers.length; i++) {
    if (Gmaps.map.markers[i].cat) {
      if (Gmaps.map.markers[i].cat.match(regEx)) {
        Gmaps.map.showMarker(Gmaps.map.markers[i]);
      }
    }
  }
  // == check the checkbox ==
  document.getElementById(category+"box").checked = true;
}

// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category) {
  var regEx = new RegExp("[" + category + "]")
  for (var i=0; i<Gmaps.map.markers.length; i++) {
    if (Gmaps.map.markers[i].cat) {
      if (Gmaps.map.markers[i].cat.match(regEx)) {
        Gmaps.map.hideMarker(Gmaps.map.markers[i]);
      }
    }
  }
  // == clear the checkbox ==
  document.getElementById(category+"box").checked = false;
  // == close the info window, in case its open on a marker that we just hid
  // Gmaps.map.infowindow.close();
}

// == a checkbox has been clicked ==
function boxclick(box,category) {
  if (box.checked) {
    show(category);
  } else {
    hide(category);
  }
}