2

テンプレートを外部ファイルにロードし、それらを使用する関数を作成しようとしていますjsrender。ただし、次のエラーが発生します。

TypeError: elem.getAttribute is not a function
[Break On This Error]   

value = $templates[elem.getAttribute(tmplAttr)];

console.logsテンプレートがajaxで取得されたことを示すものがあります。

エラーの原因となる基本的なコードは次のとおりです。

var path    = 'templates/myTemplate.tmpl.html';
var data    = searchResultTeasers;
var target  = $('#results');

$.ajax({
    url     : path,
    aysnc   : false,
    success : function(template) {

        console.log("Path", path);
        console.log("Template", template);
        console.log("Data", data);

        //=============================================
        // Save Template with url as name for future
        //=============================================
        $.templates(path, template);

        //=============================================
        // Get Template String
        //=============================================
        var templateString  = $.templates(path);

        //=============================================
        // Render Template
        //=============================================
        renderedTemplate    = templateString.render(data);

        target.html(renderedTemplate);
    }
});

エラーは jsrender.js (行 829) にあり、 $.templates(path); に関するものだと思います。しかし、何が間違っているのかわかりません。

プロジェクトの zip へのリンクは次のとおりです: http://sdrv.ms/QsZpQT

この記事に基づいて関数を作成しました: http://msdn.microsoft.com/en-us/magazine/hh975379.aspx

これがjsRenderに関連しているかどうかはわかりませんが、それでも続行できません。助けていただければ幸いです。

4

2 に答える 2

3

そのため、私はこの同じエラーに遭遇しました(jsrenderで外部テンプレートを使用しようとすると、ローカルファイルをロードするという追加の要件があります(つまり、サーバー側のコードを使用していません))。

残念ながら、あなたがリンクしているMSDNの記事(そして、これに出くわす前に私が最初に行ったもの)と、Store a jsRender template in a separate js fileに対する受け入れられた回答は、どちらも a を使用することを推奨して$.get()いますが$.ajax()、非同期には両方を使用する必要があります以下で説明するように、パラメーター、および dataType パラメーター。

これが私がそれを機能させる方法です:

  1. and を使用$.ajax()async: falseます (上記の例では、'async' のスペルを 'aysnc' と間違えたことを除いて、これを行いました)。
  2. dataType: 'text'パラメーターを ajax 呼び出しに設定します。この部分が重要でした。dataType パラメーターを省略すると、テンプレートの内容が として返され、[object XMLDocument]窒息$.templatesしてしまいました。

したがって、最終的に機能するコード スニペットは次のようになります。

var file = 'views/my_template_file.html';
$.ajax({
    url: file,
    async: false,
    dataType: 'text',
    success: function(contents) {
        $.templates({my_template: contents});
        $('#myDiv').html(
            $.render.my_template()
        );
    }
});

これが他の誰かに役立つことを願っています。

于 2012-11-29T22:56:49.453 に答える
0

参照されている msdn の記事が書かれてから $.templates() メソッドが変更された可能性があります。別のjsファイルにjsRenderテンプレートを保存するをすでに見ましたか

于 2012-10-18T16:06:38.697 に答える