2014-10-14 6 views
1

JQuery UI에서 Buttonset 위젯을 사용하려고합니다. 패키지를로드하고 템플릿에서 라디오 버튼을 잘 렌더링합니다. 나는 설치에 buttonset JQ UI 루틴을 호출하는 "렌더링"기능이 있습니다Meteor JS 템플릿이 렌더링되기 전에 템플릿 렌더링 함수가 호출 되었습니까?

Template.teamList.rendered = function() { 
    $("#buttonsetID").buttonset(); 
} 

을하지만 렌더링 기능이 템플릿을 렌더링 전에 를 호출되고있는 것처럼 보인다! 나는 그 기능에 console.log를 붙이며 화면에 무엇인가가 있기 전에 콘솔에 출력한다. 따라서 아무런 라디오 버튼도 설정되지 않으므로 .buttonset() 호출은 아무 것도하지 않습니다. 페이지가 렌더링 된 후에 콘솔에서 해당 호출을 수행하면 JQuery UI가 올바르게 작동하고 단추 세트가 나타납니다.

. 모든 기능을 설정 한 후 .rendered 함수를 호출해야합니까? 내가 뭔가 잘못하고 있는거야?

감사합니다.

편집 : 예를 들어

는 같은 일이 리더 예에서 볼 수있다.

당신은 추가하면 다음 페이지가 표시되면

Template.leaderboard.rendered = function() { 
    alert($('.player').length); 
    } 

, 그것은이 당신이 경우, 일부 JQuery와 이벤트를 추가하거나해야하는 경우가 어려운 DOM 항목에 액세스 할 수 있습니다 0으로 표시됩니다하는 JQuery UI 요소.

+0

서식 파일의 모양은 무엇입니까? –

+0

실제로 Todo 및 리더 보드 예제 앱을 비롯한 모든 템플릿으로 재생산 할 수 있습니다.렌더링 된 함수에서 DOM 요소에 액세스하려고하면 페이지에없는 것처럼 아무 것도 반환하지 않습니다. –

답변

3

rendered은 템플릿이 페이지에 처음 추가 될 때 DOM에 나타날 요소에 대해서만 작동합니다. 구독 데이터가 도착하기까지 무한히 오래 걸린 다음 템플릿을보고 어떤 요소가 기본 상태로 표시되는지 확인합니다.

예를 들어, leaderboard 예제를 사용하면 리더 보드 템플릿이 렌더링 될 때 (구독에 ​​따라 다름) 플레이어를 사용할 수 있다고 가정 할 수 없습니다. 플레이어를 타겟팅하려면 플레이어 템플릿에 rendered 콜백을 사용해야합니다.

이의 jQuery 플러그인을 적용 할 때위한 전략을 일반화하기 어렵지만, 여기에 몇 가지 아이디어가 있습니다 :

  • 사용 요소가 항상 (기본 상태에서 추가 될 경우 rendered 콜백 예를 들어 요소가됩니다 하드 코드되며 조건부에 종속되지 않습니다).

  • 가장 구체적인 하위 템플릿의 콜백을 사용하여 해당 아동 (예 : 위에서 플레이어 템플릿)을 타겟팅합니다.

  • 표시가 이벤트 (예 : 버튼 클릭)에 따라 달라지는 경우 요소를 타겟팅하려면 event handler 콜백을 사용하는 것이 좋습니다.

  • 표시가 반응 상태에 따라 달라지는 경우 요소를 타겟팅하려면 template autorun 콜백을 사용하는 것이 좋습니다. 예를 들어 this question을 참조하십시오.

+0

그래, 그랬어. 다른 템플릿으로 분할하고 작동 시키십시오. 감사! –

관련 문제