0

バックボーン ビューからアンダースコアのテンプレートにモデル データを渡すときに問題が発生しています。を使用して評価できるように、配列をテンプレートに渡したいと思い_.eachます。私のコードは以下の通りです:

テンプレート設定

_.templateSettings = {
    interpolate: /\{\{(.+?)\}\}/g,
    evaluate: /\{\{([\s\S]+?)\}\}/g
};

補間は {{ }} で、評価は{[ ]}です。私の正規表現が正しくない限り

意見

el: $('#assasinationBackbone'),
events: {
    'click #newHitJob': 'addNewHitJob'
},
initialize: function() {
},

addNewHitJob: function() {
    var hitMen = new HitManList();
    var template = _.template($('#newHitJobTemplate').html());
    hitMen.fetch({
        success: function() {
            $('#newHitJobForm').html(template(hitMen.toJSON()));
            return hitMen; //CANNOT REMEMBER WHY I PUT THIS HERE (NO SIDE EFFECTS)
        }
    });
});

ビューでテンプレートを として定義しませんでしたtemplate: が、代わりにaddNewHitJobプロパティ内で定義しました。 1. これは正しいですか? 複数のテンプレートがあるため、これを行いました。上記のテンプレートは以下にあります

テンプレート (Jade)、必要に応じて html に変換できます

.span4#newHitJobForm
    script#newHitJobTemplate(type="text/template")
        select#names                
        {[ _.each(hitman, function(name) { ]}
        option(value="{{ name._id }}") {{ name.name }}
        {[ }); ]}

2.私が見たところ、私の問題はhitmanテンプレートへの受け渡しにありますが、よくわかりません。足りないものはありますか?

4

1 に答える 1

0

あなたのevaluate正規表現は正しくありません。

evaluate: /\{\[(.+?)\]\}/g

あなたの正規表現はあなたのものevaluateと同等です。interpolate[\S\s].

また、Underscore テンプレートを呼び出すときは、テンプレートの名前と値を含むオブジェクトを渡す必要があります。配列 ( hitMen.toJSON()) を渡すだけでは何も役に立ちません。hitMenテンプレートがそれらを参照できるように、シリアル化された名前を付ける必要があります。

$('#newHitJobForm').html(template({ hitMen: hitMen.toJSON() }));

そして、テンプレートで:

{[ _.each(hitMen, function(hitMan) { ]}
option(value="{{ hitMan.cat._id }}") {{ hitMan.name }}
{[ }); ]}

私はそのhitMan.cat._id部分について推測しなければなりませんでした。

于 2012-12-17T02:23:57.740 に答える