Error when loading jsrender templates through AJAX

2019-09-22 18:41发布

我试图写一个函数来加载外部文件的模板,并与使用它们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(路径); 但我不明白,这可能是错误的。

下面是该项目的zip链接: http://sdrv.ms/QsZpQT

我根据这篇文章对我的功能: http://msdn.microsoft.com/en-us/magazine/hh975379.aspx

我不知道这是否jsRender在所有相关的,但它仍然是持续阻止我,我希望得到任何帮助。

Answer 1:

所以,我只是碰到了同样的错误,我自己(尝试使用外部模板与jsrender,以加载本地文件的附加要求时(意思是,我没有使用任何服务器端代码))。

不幸的是你链接到MSDN文章(和我去最初,跌跌撞撞到这个前)和公认的答案, 在一个单独的js文件存储在jsRender模板 ,都建议使用$.get()但你必须使用$.ajax()都为异步参数和具体的数据类型参数,如下所述。

下面是我如何开始工作:

  1. 使用$.ajax()async: false (你的例子一样上面,除了你拼错的“异步”为“aysnc”)。
  2. 设置dataType: 'text'参数Ajax调用。 这部分是关键-当我离开了具体的数据类型PARM,模板内容返回一个[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()
        );
    }
});

希望这可以帮助别人的路线。



Answer 2:

这有可能是在$ .templates()方法已经改变,因为引用的MSDN文章写。 你已经看过Store中jsRender模板在一个单独的js文件



文章来源: Error when loading jsrender templates through AJAX