我正在做一个小小的学习项目,遇到了一个我无法解决的问题.
我在谷歌chromes开发控制台上收到以下错误消息: –
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(); }
我花了好几个小时尝试自己完成这个工作,并且在我的网站的另一部分中使用了几乎相同的代码段.
解决方法
如果您尝试从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() );