0

else ブロックを使用してヘルパーを構築しようとしています。

ハンドルバーの例しか見つかりません。彼らは options.inverse が関数であることを示していますが、私の HTMLBars ヘルパーでは options.inverse はオブジェクトです。(例: 呼び出し不可)

テンプレートコード:

  {{#can 'audit' 'user' }}
    AUDIT_LINK_PLACEHOLDER
  {{else}}
    NO_AUDIT_LINK
  {{/can}}

ヘルパー コード:

Ember.Handlebars.registerHelper("can", function(verb, noun, options) {
  var abilities =  this.container.lookup('controller:application').currentAbilities;
  var sub_ability = abilities[noun] || {};
  var fn = (sub_ability[verb] || sub_ability['manage']) ? options.fn : options.inverse;
  return fn(this);
});
4

1 に答える 1

2

通常、ユーザーをすべてのコントローラーに挿入すると、ユーザーはプロパティ canAudit を持ちます。

App.User = DS.Model.extend({
  canAudit: DS.attr('boolean')
});

テンプレートは次のようになります。

{{#if user.canAudit}}
  [ ... ]
{{else}}
  [ ... ]
{{/if}}

これを行う最も基本的な方法は、インジェクションを処理したくない場合で、アプリケーション コントローラーに既にユーザー インスタンスがある場合は、次のようにすることです。

App.YourController = Ember.Controller.extend({
  needs: ['application'],
  user: Ember.computed.alias('controllers.application.user')
});

これを設定すると、ユーザーはコントローラー内でアクセスできるようになります。

解決方法に応じて、必要なものはすべてここにあります。

http://emberjs.com/api/classes/Ember.Controller.html#property_needs http://emberjs.com/api/#method_computed_alias

http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/

于 2015-03-04T22:51:16.673 に答える