2017-02-13 8 views
0

私はHandlebarsヘルパーを実装しようとしていますが、これはいくつかのデータを取り込み、そのデータに基づいてリストを生成します。ヘルパーメソッドでリストが生成された後、このリストをループしたいと思います。この例では明らかです。ヘルパーメソッドを使用してリストを生成する

シナリオは次のとおりです。いくつかのデータがあります。データを解析する際に、そのデータの不一致に関するカスタム警告を作成したいと考えています。生のJSONデータから警告を生成するメソッドは、generateWarnings()と呼ばれます。

私はこのように定義された、テンプレートをコンパイルして、データをレンダリングする機能があります。

function compileTemplate(targetId) { 
    return Handlebars.compile($("#" + targetId).html()); 
} 

function renderData(template, context, targetId) { 
    $("#" + targetId).html(template(context)); 
} 

私はそれらを呼び出しています:

var warningsPlaceHolderId = "warnings_plholder"; 
var warningsTemplateId = "warnings_template"; 

var warningsTemplate = HandlebarsHelpers.compileTemplate(warningsTemplateId); 
renderData(warningsTemplate, data, warningsPlaceHolderId); 

ハンドルテンプレート:ここ

<ol> 
    {{#each generateWarnings this}} 
     Warning description: {{this.text}} 
    {{/each}} 
</ol> 

generateWarningsヘルパーは、生のJSONデータを取得し、警告の実際のリストを作成し、 dこれらの警告をそれぞれHTMLリストの要素として表示します。

私はヘルパーを登録:

Handlebars.registerHelper('generateWarnings', function(data) { 
     return generateWarnings(data); 
    }); 

generateAll: function(data) { 
    var warning1 = { 
     type: 'error', 
     text: 'Testing error!' 
    }; 

    var warning2 = { 
     type: 'warning', 
     text: 'Testing warning!' 
    }; 

    var warning3 = { 
     type: 'info', 
     text: 'Testing info' 
    }; 

    var arr = []; 
    arr.push(warning1); 
    arr.push(warning2); 
    arr.push(warning3); 

    return arr; 
} 

だから私は、これらの3つの警告のtextプロパティがリストにあることを期待するが、代わりに私はエラーを取得しています:

キャッチされない例外TypeError:逆にrenderData()での関数ではありません。

答えて

0

あなたのヘルパーでgenerateAll()を使用しないでください。

Handlebars.registerHelper('generateWarnings', function(data) { 
     return generateWarnings(data); // THIS SHOULD BE generateAll(data)?? 
    }); 

generateAll: function(data) { 

また、ラベルを使用していますか。あなたの期待通りに呼び出すことができない関数のために。

この:

generateAll: function(data) { ... };

は次のようになります。

var generateAll = function(data) { ... };

私はJavaScriptでラベルの活用を見たことがありません。

あなたのアプローチはちょっと珍しい(やや複雑すぎる)ようです。テンプレートに渡す前にデータを操作するだけではどうですか? JavaScriptを使用して警告を生成し、テンプレートに渡す前にデータに添付することを検討します。この状況でHandlebarsヘルパーを使用する特別な理由はありません(私はあなたが解決しようとしている問題に完全に慣れていません)。

関連する問題