0

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 が返され、アクションがバブリングすることによって発生する可能性があります。

4

1 に答える 1

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"}}

于 2014-03-07T14:28:10.083 に答える