如何在自定义注册助手中使用emberjs动作助手?

时间:2014-03-07 11:49:47

标签: javascript ember.js handlebars.js discourse

我可以使用

在emberjs的把手模板中添加动作
<li>{{action "SomeAction" this}} {{this.name}}</li>

调用SomeAction。

如何在自定义助手中添加操作(这只是一个示例,我有更多代码):

Ember.Handlebars.registerHelper('foo', function(property, options) {
  var bar = Ember.Handlebars.get(this, property, options);

  var args = Array.prototype.slice.call(arguments, 1);
  args.unshift("someAction");
  args.unshift(bar);
  var action = Ember.Handlebars.helpers.action.apply(this, args);

  return new Ember.Handlebars.SafeString("<li "+new Ember.Handlebars.SafeString(action)+">"+bar.get("name")+"</li>");
});

这会创建相同的li标签,但它不起作用,当我点击li标签时出现此错误(错误消息来自话语应用):

未捕捉错误:没有处理动作''。如果您确实处理了该操作,则可以通过从控制器中的操作处理程序返回true来导致此错误,从而导致操作冒泡。

1 个答案:

答案 0 :(得分:0)

错误表示当前上下文的控制器或路由没有处理指定的操作,即不包含actions属性,其中包含foo帮助程序中指定的函数。

实施例, http://emberjs.jsbin.com/zudiqewo/1/edit

<强> JS

Ember.Handlebars.registerHelper('foo', function(property, options) {

  var action = Ember.Handlebars.helpers.action.apply(this, arguments);

  return new Ember.Handlebars.SafeString("<li "+new Ember.Handlebars.SafeString(action)+">click here</li>");
});

如果在hbs模板中test{{foo "test"}}重命名为{{foo "teest"}},则会引发上述错误。

相关问题