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 に答える