2014-10-07 7 views
0

일련의 탭이 있습니다. 페이지가로드되면 모든 탭이로드되는 것을 이해합니다. 그러나 나는 이것에 예외가되고 싶습니다 하나의 탭이 있습니다. 여기에는 특정 탭을 클릭 한 후에로드하고 싶은 위젯이 포함되어 있습니다.탭을 클릭 할 때만 탭에서 코드로드

<div class="tabbable tabbable-custom"> 
    <ul class="nav nav-tabs"> 
    <li class="active"> 
     <a id="nav-tabs-2" data-toggle="tab" href="#info">Details</a> 
    </li> 
    <li> 
     <a data-toggle="tab" href="#live">Live View</a> 
    </li> 
    <li> 
     <a data-toggle="tab" href="#local">Local Storage</a> 
    </li> 
    </ul> 
</div> 

와 다음이 내 탭

<div id="local" class="tab-pane"> 
    <div evercam="localstorage"></div> 

    <script type="text/javascript" src="https://s3.amazonaws.com/cdn.evercam.io/js/localstorage/0.0.1/hikvision.local.storage.mini.js"></script> 
    <script type="text/javascript"> 

    $('a[data-toggle="tab"]').on('click','show.bs.tab', function() { 
     if ($(this).attr('href') == '#local' && !LocalStorage.isLoaded()) { 
     // Set Evercam Camera ID 
     LocalStorage.options.cameraId = '<%= @camera['id'] %>'; 

     // OR // 
     // Using api_id and api_key 
     LocalStorage.options.api_id = '<%= current_user.api_id -%>'; 
     LocalStorage.options.api_key = '<%= current_user.api_key -%>'; 

     // Finally Load the widget 
     LocalStorage.Load(); 
     } 
    }) 


    </script> 
    </div><!--TAB PANE --> 

사용자가 탭을 클릭하면이 위젯을로드합니다. 내가 가진 문제는 사용자가 탭을 빠져 나온 다음 다시 돌아가는 경우입니다. 즉, 위젯을 다시로드하고 위젯의 두 인스턴스가 있습니다! 한 번만로드되도록 할 수있는 방법이 있습니까?

+2

당신의 바인딩 이벤트가 잘못된 것입니다. '$ (selector) .on ('click', 'show.bs.tab', function() {// // 여기에 awesomething을 사용하십시오.}) ' – Kai

+0

고마워요 Jh Kaiz, 위 코드를 업데이트했습니다. 나는 if ($ (e.target) .attr ('href') == 'local ') {{}} 사이에이 비트가 없거나없이 시도했지만 어느 것도 작동하지 않는다. 내가 잘못한 것을 볼 수 있니? –

+0

당신은 귀하의 HTML 코드를 제공 할 수 있습니까? 단지'', 나는 당신을 위해 JS 해결책을 제공해야합니다 :). 이 경우, 당신이 기대하는 것은'if ($ (this) .attr ('href') == '#local') {// 원하는 것을한다}' – Kai

답변

0

코드 구조가 얼마나 잘 모르겠지만, 그것은 당신이 수있는 경우처럼 보인다 다음

$('a[data-toggle="tab"]').on('click','show.bs.tab', function(e) { 
if ($(e.target).attr('href') == '#local' && !LocalStorage.isLoaded()) { 
// Set Evercam Camera ID 
LocalStorage.options.cameraId = '<%= @camera['id'] %>'; 

// OR // 
// Using api_id and api_key 
LocalStorage.options.api_id = '<%= current_user.api_id -%>'; 
LocalStorage.options.api_key = '<%= current_user.api_key -%>'; 

// Finally Load the widget 
LocalStorage.Load(); 
} 
}); 

은 그래서 오른쪽 탭을 클릭하면, 모두를 고려하는 경우거야 위젯은

이 좋아, 조금 거기 착각있어 UPDATE를로드됩니다.

$('a[data-toggle="tab"]').on('click', function(e) { 
    // Check if the clicked tab is the right one 
    // Also check if the widget is loaded 
    if ($(this).attr('href') == '#local' && !LocalStorage.isLoaded()) { 
    // Set Evercam Camera ID 
    LocalStorage.options.cameraId = '<%= @camera['id'] %>'; 

    // OR // 
    // Using api_id and api_key 
    LocalStorage.options.api_id = '<%= current_user.api_id -%>'; 
    LocalStorage.options.api_key = '<%= current_user.api_key -%>'; 

    // Finally Load the widget 
    LocalStorage.Load(); 
    } 
}); 

나는 그것이 thrid 파티 라이브러리입니다, 당신의 LocalStorage 객체가 어떻게 작동하는지 몰라? 너 자신인가? 전자의 경우 실행중인 인스턴스가 있는지 확인하는 방법이있을 것입니다. 후자의 경우, 당신은 단지

LocalStorage.prototype.isLoaded = function() { 
    //Here you write code to check if there is a running instance of the widget loaded 
    return this.widget !== undefined 
} 

을 할 수 또는 당신은 단순히 하나의 인스턴스 만

합니다 ('show.bs.modal' 참조를 제거

를 실행 할 수 있도록하는 방식으로 Load 기능을 작성할 수 있습니다.이 해고 이벤트입니다 당신이 탭을 보여줄 때 부트 스트랩은 클릭과 아무런 관련이 없다.

+1

'function()'에 e를 넣는다. 만약 e가 정의되지 않았다면 에러가 발생합니다 : D. – Kai

+0

경고 인에게 감사드립니다! –

+0

조금 수정이 필요하다. $ (e.target) .attr ('href')'보다'$ (this) .attr ('href')'를 사용해야한다고 생각한다. '.show.bs.tab' 내부에 스팬 (span) 등이 있으면 잘못 될 것입니다.이 경우에는'$ (e.target) === $ ('. show.bs.tab span')' 이 경우 우리는'function (e)'을 더 이상 필요로하지 않는다. – Kai

0

이것을 체크한다. 나는이 질문을 끝낼 것이기를 바란다. :)

는 로컬 스토리지의 문제를 해결 : Fiddle2

+0

안녕하세요, Kaiz, 이것을 만들어 주셔서 감사합니다. 이 탭을 클릭하면 코드를로드하지만 여전히 다른 탭으로 이동하고 다시로드 할 자바 스크립트 일으키는 그래서 내가로드 할 위젯 두 인스턴스로 끝나는 문제가 있습니다 –

+0

내 업데이트 확인 그것이 당신의 아이디어 @ Ciarán과 일치한다면. localStorage는 3 개의 함수를 가지고있다 :'setItem(), removeItem(), getItem()' – Kai