如何制作余烬车把帮手?

时间:2015-03-21 14:28:55

标签: ember.js handlebars.js

Hy to all

我尝试创建帮助

Handlebars.registerHelper('testCan', function(permissionName, options){
  var permission = Ember.Object.extend({
    testCan: function(){
      debugger;
      return true;
    }.property()
  }).create();

  // wipe out contexts so boundIf uses `this` (the permission) as the context
  options.contexts = null;

  Ember.Handlebars.helpers.boundIf.call(permission, "testCan", options)
});

并将其用作

{{#testCan read controller=controller}}
    <h1>It's works</h1>
{{/testCan}}

我这样做是为了从这里测试模式http://livsey.org/blog/2012/10/16/writing-a-helper-to-check-permissions-in-ember-dot-js/

但它没有用((

出了什么问题? Ember版本 - 1.9.1

P.P.S最初我使用的是现有代码(请参阅此处Ember.handlebars boundIf didn't call calculated property)但是这个例子我已经尝试重现/解决了这个问题

2 个答案:

答案 0 :(得分:2)

如果您尝试检查权限/授权,可能最简单的方法是使用现有的加载项。我建议ember-canember-sanctify(我相信sanctify仅支持1.10及更高版本。)

您尝试做的事情虽然可能更容易在组件内部进行推理。在实践中,我建议创建帮助程序的唯一原因是要么进行简单的转换,要么能够传递任意数量的args。 Ember可以改进的一个方面是帮助用户了解帮助者内部更复杂的内容。

示例组件:

app/templates/components/test-can.hbs

{{#boundIf hasPermission}}
  {{yield}}
{{/boundIf

app/components/test-can.js

import Ember from 'ember';

export default Ember.Component.extend({
  permission: null,
  controller: null,

  hasPermission: function() {
    //implement logic here
  }.property('permission', 'controller')
});

使用示例:

{{#test-can permission=read controller=controller}}
  Your Content Here
{{/test-can}}

不确定您的示例中有哪些readcontroller,因此如果这些变量没有指向任何内容,那么这不会做太多。希望这会有所帮助。

更新

因此,在app/helpers/test-can.js创建一个类似于以下内容的文件

export default function(permissionName, options){
  var permission = Ember.Object.extend({
    testCan: function(){
      return true;
    }.property()
  }).create();

  // wipe out contexts so boundIf uses `this` (the permission) as the context
  options.contexts = null;

  return Ember.Handlebars.helpers.boundIf.call(permission, "testCan", options);
}

测试时不起作用吗?上面的例子当然总是返回true,因此总是产生块。 1.9.1 still basically uses the same code for the if helper

答案 1 :(得分:0)

相关问题https://github.com/emberjs/ember.js/issues/10692

  

帮助者内部的这个上下文在各种版本中都发生了变化:

     

这是1.0.0中的控制器   通过1.8.0这是1.9.0和1.10.0中的视图   这在1.11+中是未定义的   我的猜测是1.9中的上下文更改导致此错误,将助手更新为   将unknownProperty添加到控制器将解决问题。