6

我正在做一个小学习项目,但遇到了一个我无法解决的问题。

我在谷歌浏览器开发控制台上收到以下错误消息:-

Uncaught TypeError: Object [object Object] has no method 'match'
lexer.nexthandlebars-1.0.0.beta.6.js:364
lexhandlebars-1.0.0.beta.6.js:392
lexhandlebars-1.0.0.beta.6.js:214
parsehandlebars-1.0.0.beta.6.js:227
Handlebars.parsehandlebars-1.0.0.beta.6.js:507
compilehandlebars-1.0.0.beta.6.js:1472
(anonymous function)handlebars-1.0.0.beta.6.js:1481
(anonymous function)scripts.js:103
jQuery.Callbacks.firejquery.js:1046
jQuery.Callbacks.self.fireWithjquery.js:1164
donejquery.js:7399
jQuery.ajaxTransport.send.callback

现在,这会在车把脚本中的以下代码出现错误

match = this._input.match(this.rules[rules[i]]);
Uncaught TypeError: Object [object Object] has no method 'match'

所以我从中得到的是,我的代码一定有问题,而不是车把代码,即使它处于测试阶段。

这是启动这一切的代码部分。

displayJobInfo: function( e ) {
    var self = Actors;

    self.config.jobInfo.slideUp( 300 );
    var jobnum = $(this).data( 'job_id' );
    $.ajax({
        data: { job_id: jobnum }

    }).then(function( results ) {
        self.config.jobInfo.html( self.config.JobInfoTemplate( { jobs: results, job_id: jobnum }) ).slideDown(300);
    });
    console.log($(this).data( 'job_id' ));
    e.preventDefault();
}

我花了几个小时试图自己解决这个问题,并且几乎相同的代码部分在我网站的另一部分工作。

一点背景知识 - 我正在使用 php 从 mysql 中提取数据库,然后根据用户输入和 jquery 查询数据库以将字段覆盖回页面上。

4

3 回答 3

9

如果您尝试从 jquery 元素对象而不是字符串编译模板,则会发生这种情况。例如

<script id="my-template-script" type="text/template">...</script>

接着

var my_template = Handlebars.compile( $("#my-template-script") );  // WRONG

你可能期望这会立即爆炸,但事实并非如此。相反,它应该是

var my_template = Handlebars.compile( $("#my-template-script").html() );
于 2012-11-03T23:12:59.120 回答
3

如果您将模板作为 text/html 获取,那么您的模板可能是 htmlDocument。如果您按如下方式初始化模板,那么它将正常工作。

function getTemplate(templateName,context, callback, errorCallback) {
var template = {};
template.name = templateName;
$.ajax({
    url: templateName,
    timeout: 1000,
    datatype: "text/javascript",
    error: function(jqXHR, textStatus, errorThrown) {
        errorCallback && errorCallback.call(context, textStatus);
    },
    success:function(response, textStatus, jqXHR) {
        try {
            template['handlebar'] = Handlebars.compile(jqXHR.responseText);
        } catch(e) {
            console.error("error while creating Handlebars script out of template for [", template, e);
            throw e;
        }
        template['rawTemplate'] = jqXHR.responseText;
        callback && callback.call(context, template);
        return response;
    }
});

}

如果您使用响应参数而不是 jqHXR.responseText,那么您将找不到“匹配”。我试过了。

于 2012-05-14T21:25:00.170 回答
1

match仅适用于字符串。您必须将其应用于输入的值。如果它是一个 jQuery 对象,你可以使用,_input.val()否则_input.value应该可以工作。

另一方面,由于它是库的一部分,您可能需要检查预期输入的数据类型以及实际发送的数据类型。

null例如是 javascript 中的一个对象,因此如果库不处理它,您可能希望将其更改为空字符串。

于 2012-04-26T09:06:00.363 回答