Aje*_*jey 5 javascript handlebars.js ember.js
我有一个帮助方法,将数字映射到文本 -
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";
}
});
Run Code Online (Sandbox Code Playgroud)
我可以通过使用在视图中使用帮助器 {{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}});
}
},
});
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.
还有什么其他方法?
为了更好地理解,这里是jsbin
Jan*_*Jan 27
使用ember-cli可以这样做:
// helpers/foo.js
export function foo(params) {
return params;
}
export default Ember.Helper.helper(foo);
Run Code Online (Sandbox Code Playgroud)
Helper foo导出一个函数(包含辅助逻辑)和包装在Ember帮助器中的函数(用于模板).
// helpers/bar.js
import { foo } from '<project>/helpers/foo';
export function bar(params) {
return foo(params);
}
export default Ember.Helper.helper(bar);
Run Code Online (Sandbox Code Playgroud)
Helper bar从中导入辅助函数,foo并在其自己的模板助手中使用它.
将逻辑从帮助器中拉出,使其可供帮助器和非车把帮助器项目调用。将其解析为车把模板并对其进行评估过于复杂。
你把它放在哪里取决于你,你可以将它命名为你的应用程序,或者只是将它创建为与你的助手一起使用的函数。
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);
});
Run Code Online (Sandbox Code Playgroud)
http://emberjs.jsbin.com/cenep/1/edit