如何在渲染模板后触发功能

时间:2014-10-18 13:30:34

标签: javascript templates backbone.js marionette

我在我的应用程序中使用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之前的意思是,无论我们使用template进行模板化,dom都可用。

但我在null函数内获得了onRender

我想要一个回调,它应该在dom中template之后触发。所以无论我使用template模板化,我都可以访问元素。

我可以做一件事,无论我在onRender内写的是什么,我都可以按照以下方式设置time

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

如果我设置time,工作正常,但这不是正确的实施方式。

任何人都可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:0)

已解决,我必须使用onShow而不是onRender功能。现在它工作正常。