我有以下代码用于制作一个简单的模板引擎.html页面如下: -
<ns tmp="red"></ns>
<ns tmp="blue"></ns>
另一方面,我有一个JQuery插件中的JavaScript,它读取标签,然后获取tmp
的属性
现在我想接收字符串的值,然后将其转换为函数,以便调用对象内部的预定义值,但字符串转换为函数不起作用。我在Stack溢出中提到了一些问题但没有用。然后是我在下面提到的JQuery代码。
(function($){
/*Collection of the template data*/
var k=template();
/*This retrieves all the custom tags and gets the template
property to point to.*/
var templateArray=$('ns');
templateArray.each(function(){
var template=$(this).attr('tmp');
var funcName=window[template]();//This does not work
alert(l());
});
})(jQuery);
function template(){
var t={
blue:function(){
return "Hello";
},
red:function(){
return "ff";
}
};
return t;
}
请建议如何相处。我也有这个小提琴。随意编辑,以便我能够以某种方式调用对象内部的函数。谢谢 小提琴链接FIDDLE LINK
答案 0 :(得分:1)
正如评论中指出的那样,您要执行的函数不是window
对象的一部分,而是template
对象的一部分,因此您需要从适当的位置获取它们
此外,对局部变量使用现有函数的相同名称可能有效,但根本不是一个好主意,最好使用正确的名称。
工作代码:
templateArray.each(function(){
var tmp = $(this).attr('tmp');
var funcName=k[tmp];
var result = funcName();
alert(result);
});
答案 1 :(得分:1)
在javascript对象和数组中是一回事。因此template.red
和template['red']
是相同的。
我建议将函数放入数组中。这样你甚至可以在运行时扩展它。