2

我正在尝试将 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}}属性,可能是因为您可以order.id在 Ember.data 记录上执行此操作,但不能 order.number(您必须使用 get - order.get("number")

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

4

2 回答 2

3

您可以使用EmberObject.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 示例

于 2013-07-17T16:59:56.243 回答
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;
}
于 2013-07-17T16:34:45.973 回答