从jQuery调用Handlebars部分

时间:2014-04-11 00:38:19

标签: javascript jquery handlebars.js

说我的javascript中有以下部分内容:

Handlebars.registerPartial('itemcount', '<div class="row"><div class="count span1">{{count}}</div><div class="notes span4">{{notes}}</div>/div>');

并像这样使用它:

    {{#each item_counts}}
      {{> itemcount }}
    {{/each}}

我怎样才能在jQuery回调中使用'itemcount'部分?(等等)?

$.ajax({
  url: '/arc/v1/api/item_counts/',
  type: 'POST',
  data: {item_count:{inventory_item_id: id_val, count:count_val, date:date_val, notes:notes_val}},
  dataType: 'json'
}).done(function(r){
  var item_count=r.item_count;
  // here is where I would want to get access to this and 
  //var template = Handlebars.compile(source, item_count); ????

  $('.itemcount-header').after('this is after');
});

thx任何帮助

1 个答案:

答案 0 :(得分:1)

当您注册部分时,源将存储在关联键下的Handlebars.partials中。然后,您可以在运行时编译此源并将结果函数用作常规模板:

$.ajax({
    // ...
}).done(function(r){
    var item_count = r.item_count;
    var markup = Handlebars.compile(Handlebars.partials.itemcount, {
        count: item_count
    });
});

如果多次重复使用,也可以将预编译模板注册为部分模板:

Handlebars.registerPartial('itemcount',  Handlebars.compile(src));

$.ajax({
    // ...
}).done(function(r){
    var item_count=r.item_count;
    var markup = Handlebars.partials.itemcount({
        count: item_count
    });
});

请注意,注册已编译的部分内容时,您无需更改主模板中的任何内容。

演示http://jsfiddle.net/nikoshr/9La3p/