2011-02-03 3 views
2

여기서는 매우 구체적입니다. UtahRealEstate.com으로 이동하여지도보기에서 검색하고 결과를 보면지도 전체에 플롯이 있고 오른쪽에 목록이 있습니다. 지도에서 핀을 클릭하면 팝업이 나타나고 MLS #를 클릭하면 속성 설명이있는 다른 팝업이 표시됩니다. 오른쪽 목록에서 MLS 번호를 클릭하고 속성 설명 팝업을 열 수도 있습니다.KRL & Ajax와 협력하기

해당 팝업의 html에 버튼을 추가하고 싶습니다. html을 잘 삽입 할 수는 있지만 도전 과제는 속성 설명이로드 된 시점을 어떻게 결정하여 내부 HTML을 읽고 버튼을 추가 할 수 있습니까?

스크린 샷 :

enter image description here

enter image description here

enter image description here

+0

을 테스트한다. 당신이 조금 힘들어하려고하는 것을 만들어내는 몇 가지 양상이 있습니다. 그래서 저는 지금 당장 대답을하려고 노력하고 있습니다. –

+0

다른지도보기가 있습니다. 먼저 작업하고 싶은지도보기에 어떻게 접근 했습니까? 이야기하고있는 특정지도보기의 스크린 샷을 게시 할 수 있습니까? –

+0

스크린 샷은 제가 언급 한 것과 정확히 같습니다. 게시 해 주셔서 감사합니다. 다른지도보기가 확실하지 않습니다. 나는 "Alpine, UT"라고하는 검색을하고 있는데,지도보기에서 결과를 보는 것입니다. 목록보기를 수행하고 속성보기를 클릭하면 해당 속성에 대한 페이지가로드되고 단추가 삽입됩니다. 그것은 js 함수를 트리거하기 위해 완전히로드 된시기를 어떻게 알 수 있는지 모르겠다는 두꺼운 상자보기입니다. – Dustin

답변

1

사용자 클릭을 기반으로 할 때까지 요소를 찾지 않는 트릭을 사용했습니다. 진짜 까다로운 부분은지도의 카드에 나타나는 MLS 번호 링크가 라이브 클릭 바인딩을 사용할 수 없도록 클릭 이벤트가 창에 전파되는 것을 중단하는 것이 었습니다.

나는 너무 오래 머물 수 없으므로 코드가 상당히 잘 읽혀 지므로 내 광기를 통해 길을 읽을 수 있어야합니다. ; 불을 지르고 콘솔)

ruleset a60x561 { 
    meta { 
    name "utahrealestate" 
    description << 
     utahrealestate 
    >> 
    author "Mike Grace" 
    logging off 
    } 

    dispatch { 
    domain "utahrealestate.com" 
    } 

    rule search_for_realestate { 
    select when web pageview "\/search\/" 
    pre { 

    } 
    { 
     notify("title","content") with sticky = true; 
     emit <| 
     // sidebar click watching easy 
     // click event isn't being blocked so we can use .live and not 
     // worry about HTML being present at time of event listener binding 
     $K(".full_line a").live("click", function() { 
      console.log("sidebar mls clicked"); 
      // get the report!!! 
      KOBJ.a60x561.getReport(); 
     }); 

     // pin on map mls number is a bit harder because click event is 
     // being blocked from propegating to the window 
     // to get around this we can 
     // 1) watch for click on pin 
     // 2) wait for mls element to load 
     // 3) attatch our own element level event listener 
     $K("#mapdiv_OpenLayers_Container image").click(function() { 
      console.log("pin on map clicked"); 
      // attatch click event listener on mls element once it loads 
      setTimeout(function() { 
      KOBJ.a60x561.grabMls(); 
      }, 500); 
     }); 

     // ATATCH LISTENER TO MLS NUM ON MAP 
     KOBJ.a60x561.grabMls = function() { 
      console.log("looking for mls in hovercard"); 

      // grab jQuery reference to element we are looking for 
      var $cardMls = $K("#property-overview a:first"); 

      // only go on if it's on the page and visible 
      if (($cardMls.length > 0) && ($cardMls.is(":visible"))) { 

      console.log("foud mls on hevercard"); 

      // watch for click on mls num on card 
      $cardMls.click(function() { 
       console.log("mls clicked on hovercard above map pin"); 
       // get the report!!! 
       KOBJ.a60x561.getReport(); 
      }); 
      } else { 
      setTimeout(function() { 
       KOBJ.a60x561.grabMls(); 
      }, 500); 
      }; 
     }; 

     // GRAB REALESTATE LISTING DETAILS ONCE IT LOADS IN THICK BOX 
     KOBJ.a60x561.getReport = function() { 
      if ($K("#public-report-wrap").length > 0) { 
      console.log("Listing details found!"); 
      } else { 
      setTimeout(function() { 
       KOBJ.a60x561.getReport(); 
      }, 500); 
      }; 
     }; 
     |>; 
    } 
    } 
} 

스크린 샷 내가 뭔가를 언뜻보다 약간 복잡합니다 응용 프로그램

enter image description here

+0

위대한 작품. 한 호버 카드가 이미 열려있는 동안 핀을 클릭 할 때 문제가 발생하여 사소한 수정을했습니다. 그 외에는 완벽! – Dustin

+0

SWEET! 네, 유스 케이스를 시험하는 걸 잊었어요. 다행스럽게도 도와 줬어. –

1

짧은 대답 (나중에 편집 할 수 있습니다) :

를 사용하여 작업 Watch은 선택을 볼 수 있습니다.

그런 다음 click을 선택할 때 선택을 사용하십시오.