我正在开展一个小小的学习项目,遇到了一个我无法解决的问题。
我在google chromes dev控制台上收到以下错误消息: -
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查询数据库,将字段重叠到页面上。
答案 0 :(得分: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() );
答案 1 :(得分: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,那么您将找不到“匹配”。我试过了。
答案 2 :(得分:1)
match
仅适用于字符串。您必须将其应用于输入的值。
如果它是一个jQuery对象,你可以使用_input.val()
,否则_input.value
应该工作。
另一方面,由于它是库的一部分,您可能需要检查预期输入的数据类型以及实际发送的内容。
例如, null
是javascript中的一个对象,因此如果库没有处理它,您可能希望在空字符串中更改它。