Javascript Ember js在控制器内使用把手辅助工具?

Javascript Ember js在控制器内使用把手辅助工具?,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我有一个助手方法,可以将数字映射到文本- Ember.Handlebars.helper('getStatusText', function (value, options) { switch(value) { case 1: return "Fresh"; break; case 2: return "Callback"; break; default: return "Unable to

我有一个助手方法,可以将数字映射到文本-

Ember.Handlebars.helper('getStatusText', function (value, options) {
    switch(value) {
        case 1: return "Fresh";
            break;
        case 2: return "Callback";
            break;
        default: return "Unable to get Status";
    }
});
我可以使用
{{{getStatusText 1}}

但是如何在ObjectController内的操作中使用帮助器

Test.DealController = Ember.ObjectController.extend({

    selectedStatusType: null,
    statusList: ["Fresh","Callback"],

    actions: {
        updateStatus: function(deal) {
// How do I call the handlebars helper here ?
            console.log({{getStatusText 1}});
        }
    },

});
这显然是行不通的

其他的方法是什么


为了更好地理解,下面是从帮助器中拉出逻辑的方法,使帮助器和非Handlebar帮助器项都可以调用该逻辑。将其解析为Handlebar模板并对其进行评估过于复杂

放在哪里取决于您,您可以将其命名为应用程序的名称空间,或者只是将其创建为与助手一起使用的函数

function getStatusText(value){
    switch(value) {
        case 1: return "Fresh";
            break;
        case 2: return "Callback";
            break;
        default: return "Unable to get Status";
    }
}

Ember.Handlebars.helper('getStatusText', function (value, options) {
  return getStatusText(value);
});

使用ember cli,可以这样做:

// helpers/foo.js
export function foo(params) {
    return params;
}
export default Ember.Helper.helper(foo);
Helper
foo
导出函数(包含Helper逻辑)和包装在Ember Helper中的函数(用于模板)

//helpers/bar.js
从'/helpers/foo'导入{foo};
导出功能栏(参数){
返回foo(params);
}
导出默认的Ember.Helper.Helper(条形);

Helper
bar
foo
导入Helper函数,并在它自己的模板Helper中使用它。

大多数Helper都很简单。在这种情况下,这是一条路要走。准确地传递函数所需的数据

Ember还提供了一个更复杂的用例。它们可以利用其他容器依赖项。您仍然可以使用基于类的助手的
compute
方法调用导出的函数

但是,函数的参数列表对于其他调用者来说可能会变得笨拙

从“余烬助手”导入助手;
从“余烬服务/注入”导入服务;
导出函数vanillaFunction(imageService、userService、foo、bar、baz、dependency3、选项){
...
}
导出默认帮助程序.extend({
imageService:service('image'),
用户服务:服务(“用户”),
计算(位置参数、哈希参数){
返回函数(this.get('imageService')、this.get('userService')、positionparams[0]、positionparams[1]、…);
},
});
为了从容器查找中获益,而不是调用普通函数,您可以手动实例化这样的助手并自己调用
compute
。这是罕见的。但它得益于一个小界面,与模板中的调用方式一致。帮助器通常由htmlbar实例化,以便在模板中使用,模板具有特殊的上下文和观察规则。因此,在你的控制器里有一个小小的跳环来使用它

从“余烬控制器”导入控制器;
从'ember owner/get'导入getOwner;
从“余烬所有者/集合”导入setOwner;
导出默认控制器.extend({
someMethod(){
const owner=getOwner(此);
const helperFactory=owner.resolveRegistration('helper:my helper');
const helperInstance=helperFactory.create();
setOwner(helperInstance,owner);//我不知道工厂为什么不为您这样做
return helperInstance.compute([1]);/“Fresh”
},
});

在ember cli中,您可能会将
getStatusText
封装在一个服务中吗?我不知道您是否需要一个服务,但可以,将其拉出,放在其他可访问的对象中。这应该是一个可接受的答案。像一个杰出的工程师一样工作,在执行过程中不做任何更改。当helpers实现他们正在做的事情时,这很好,不包括外部函数和保持helpers的原子性
// helpers/bar.js
import { foo } from '<project>/helpers/foo';
export function bar(params) {
    return foo(params);
}
export default Ember.Helper.helper(bar);