6

私は小さな学習プロジェクトに取り組んでいて、解決できない問題に遭遇しました。

google chromes dev consoleで次のエラーメッセージが表示されます:-

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 に答える