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)但是这个例子我已经尝试重现/解决了这个问题
答案 0 :(得分:2)
如果您尝试检查权限/授权,可能最简单的方法是使用现有的加载项。我建议ember-can或ember-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}}
不确定您的示例中有哪些read
和controller
,因此如果这些变量没有指向任何内容,那么这不会做太多。希望这会有所帮助。
因此,在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添加到控制器将解决问题。