在JavaScript代码中应用Handlebars模板

时间:2013-07-17 16:06:38

标签: ember.js handlebars.js

我正在尝试使用Ember的Handlebars引擎来实现非UI相关目的。我有一系列文本模板(基本上是占位符+静态文本),比如

Order number {{number}} / {{year}}

我在控制器功能中使用以下代码(为了示例,这里简化了):

formattedTitle: function(order) {
   var orderTitle = "Order number {{number}} / {{year}}";
   var template = Handlebars.compile(orderTitle);
   return template(order);
}

offer是一个Ember.data记录,包含两个字段。

当我运行该函数时,结果字符串只包含静态文本:

  

订单号/

它仅适用于{{id}}属性,可能是因为您可以在Ember.data记录上执行order.id,但不能order.number(您必须使用get - {{1} })

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Ember's Object.getProperties()将多个属性拉入一个简单的javascript对象,并将其作为Handlebars上下文传递。不确定这是最好的方法,但是......

formattedTitle: function() {
    var order = Ember.Object.create({number: 1, year: 2013});
    // retrieve the properties ahead of time using Ember getter
    var orderContext = order.getProperties(['number', 'year']);
    var orderTitle = "Order number {{number}} / {{year}}";
    var template = Handlebars.compile(orderTitle);
    var output = template(order);
    return output;
}

JSBin example

答案 1 :(得分:2)

尝试这样的事情:

function formattedTitle(order) {
  var number = order.get('number');
  var year = order.get('year');
  var orderContext = { number: number, year: year };
  var orderTitle = "Order number {{number}} / {{year}}";
  var template = Handlebars.compile(orderTitle);
  var output = template(orderContext);

  return output;
}