下划线模板 - jQuery对象引用

时间:2015-10-11 17:34:15

标签: jquery underscore.js template-engine

在我的模板中某处我需要渲染图表:

{{= new App.components.Doughnut() }}

Doughnut构造函数返回编译模板的字符串,但在Doughnut的逻辑内,我有一个超时,它改变了它的图表值。问题是,我无法在内部保存实例,以后再访问它,因为它被转换为字符串并作为编译模板的一部分打印,实例丢失了。

我写了无数的地方:

{{= new App.components.Doughnut({radius:50,50}).render() }}

有没有办法以某种方式从工厂内部保存对实例的引用,以后我可以访问它?

我想可能以某种方式将占位符(带有自己的设置)放在模板中,因此只有在编译之后,实例才会附加到每个占位符。

App.components.Doughnut = function(settings = {}){
    var template = _.template(templates["components\\plotting\\doughnut"]);
    this.settings = $.extend({}, { radius:[70,70]}, settings);
    this.compiledTemplate = template(this.settings);
    this.doughnut = $(this.compiledTemplate);
};

App.components.Doughnut.prototype = {
    render : function(){
        // animate the value with delay
        setTimeout( this.setValue.bind(this), 1000 );
        return this.compiledTemplate;
    },

    setValue: function (value = this.settings.value){
        // do something 
        this.doughnut.doSomething()
    }
};

1 个答案:

答案 0 :(得分:0)

结束在我的模板中写下这个:

<script type='js/template-doughnut'>
   {"value" : 80}
</script>

然后在模板控制器中,我写道:

$target.find('script[type="js/template-doughnut"]').each(function(){
    try{
        var data = JSON.parse(this.innerHTML),
            doughnut = new App.components.Doughnut( data );
        // This way reference to the element is saved
        $(this).replaceWith(doughnut.elm); 
    }
    catch(err){}
})