在我的模板中某处我需要渲染图表:
{{= 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()
}
};
答案 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){}
})