2014-10-18 3 views
1

В моем приложении используется marionette. Я показываю ItemView через regions, как в следующем.Как вызвать функцию после шаблона визуализации

var productInfoViewObj=new productInfoView.ProductInfoView({model:tagInformationModel.tagInformationModelObj}); 
exports.MyApp.bodyContainer.show(productInfoViewObj); 

Это код, написанный внутри view.

exports.ProductInfoView=Backbone.Marionette.ItemView.extend({ 
     domInfo:{ 
      mainTemplateId:"tagProductListTpl", 
      tableTemplateId:"taginfoViewTpl", 
      tableContentDiv:"taginfoViewDiv", 
      //tad Info 
      tagInfoTabId:"tagInfoBtn", 
      productInfoTabId:"productInfoBtn" 
     }, 
     template:function(){ 
      return commonFunctions.templateCompilation("tagProductListTpl",""); 
     }, 
     onRender:function(){ 
      console.log(document.getElementById("productInfoBtn")); 
     } 
    }); 

Я передаю templateId and data в качестве аргументов commonFunctions.templateCompilation. Он будет компилировать и возвращать compiled string. Этот скомпилированный результат переходит к template.

Согласно моему предположению, после завершения функции template, onRender функция будет срабатывать. То, что я имею в виду до onRender, dom будет доступен независимо от того, что мы планируем, используя template.

Но я получаю null внутри onRender функция.

Я хочу обратный вызов, он должен срабатывать после template, доступного в dom. поэтому я могу получить доступ к элементам, которые я шаблонизировал, используя template.

Я могу сделать одно, независимо от того, что я написал внутри onRender, я могу установить time, как следующим образом.

onRender:function(){ 
    setTimeout(function(){console.log(document.getElementById("productInfoBtn"));},1000); 
} 

Если я устанавливаю time, работает нормально, но это не правильный способ реализации.

может кто-нибудь мне помочь.

Спасибо.

ответ

0

Это решение, я должен использовать onShow вместо onRender функции. Теперь он работает нормально.

Смежные вопросы