2016-11-02 4 views
0

Blaze가 템플릿을 다시 사용할 때 어떻게 템플릿 # onRendered 또는 이와 동등한 트리거가 가능합니까?Blaze가 템플릿을 재사용 할 때 템플릿 # onRendered를 어떻게 트리거 할 수 있습니까?

나는 그 <option> 어린이와 불꽃 템플릿 (반응성을 얻기 위해 Session에 그리는 도우미를 대상으로) {{#each}}를 사용하여 생성되는 <select> 요소를 기반으로 jQuery를 UI selectmenu 위젯을 가지고있다. 나는 Rendered의 selectmenu를 새로 고쳐 먹고있다.

  • 블레이즈 템플릿이 정확합니다. (<option>{{text}}</option>)
  • 세션이 변경지고 (모두 console.log()으로 확인하고 수동으로 브라우저 콘솔에서 설정.
  • 세션 반응성, 도우미, 그리고 {{#each}}는 숨겨진 <select>이 옵션이 올바르게 업데이트되었는지 알 검사 (작업)

그것은 모든 것이 Session 옵션 컨텍스트 변경이 더 많은 옵션을 (새 템플릿 인스턴스가 생성 된 후 onRendered()가 호출되는)가로서 잘 한 작동하지만, 그래서 템플릿, 재사용지고 단지의는 jQuery를 UI의 selectmenu입니다 부정확하다 (curre로 최신이 아니다 NT 컨텍스트의 상태) 옵션의 컨텍스트가 같거나 더 적은 옵션으로 변경되면 (더 적은 옵션은 onDestroyed()을 호출하고 옵션 수가 동일하지 않습니다.)

답변

0

해결 방법 :(내 생각에 항상 입니다.) 대신 Tempate.on_ [anything] _()을 사용하십시오.

https://docs.meteor.com/api/tracker.html#Tracker-afterFlush

예컨대

myContextOptionsHelper: function() { 
    let context = Session.get('myContext'); 
    let contextOptions = app.client.tempdata.contextOptions[context]; 
    Tracker.afterFlush(() => { 
    if ($('#mySelectmenu').is(':ui-selectmenu')) { 
     $('#mySelectmenu').selectmenu('refresh'); 
    } 
    }); 
    return contextOptions; 
}