0

我有以下代码用于制作简单的模板引擎。html页面如下:-

<ns tmp="red"></ns>
<ns tmp="blue"></ns>

另一方面,我在 JQuery 插件中有一个 JavaScript,它读取标签,然后获取tmp 现在的属性,我想接收字符串的值,然后将其转换为函数,以便调用预定义的值在对象内部,但字符串到函数的转换不起作用。我在堆栈溢出中提到了一些问题,但没有用。然后是我在下面提到的 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 FIDDLE LINK

4

2 回答 2

1

正如评论中还指出的那样,您要执行的函数不是对象的window一部分,而是对象的一部分template,因此您需要从适当的位置获取它们。

此外,对局部变量使用与现有函数相同的名称可能会起作用,但根本不是一个好主意,您最好使用专有名称。

工作代码:

templateArray.each(function(){
    var tmp = $(this).attr('tmp');
    var funcName=k[tmp];
    var result = funcName();
    alert(result);
});

更新了小提琴

于 2012-07-02T12:22:33.927 回答
1

在 javascript 中,对象和数组是一回事。所以template.redtemplate['red']都是一回事。

我建议将函数放入数组中。这样,您甚至可以在运行时扩展它。

http://jsfiddle.net/tricki/YS9Gs/10/

于 2012-07-02T12:33:14.260 回答