Javascript 我得到的错误是:编译错误:当我试图在Ember中编写助手函数时,ifCond不是助手
我在ember.js中有一个助手函数(ifCond),如下所示Javascript 我得到的错误是:编译错误:当我试图在Ember中编写助手函数时,ifCond不是助手,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我在ember.js中有一个助手函数(ifCond),如下所示 export default () => { Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) { alert("hi"); if (params[3]) { //handle case insensitive conditions if 4 param is passed.
export default () => {
Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
alert("hi");
if (params[3]) { //handle case insensitive conditions if 4 param is passed.
params[0] = params[0].toLowerCase();
params[2] = params[2].toLowerCase();
}
let v1 = params[0];
let operator = params[1];
let v2 = params[2];
switch (operator) {
case '==':
return (v1 == v2);
case '!=':
return (v1 != v2);
case '===':
return (v1 === v2);
case '<':
return (v1 < v2);
case '<=':
return (v1 <= v2);
case '>':
return (v1 > v2);
case '>=':
return (v1 >= v2);
case '&&':
return !!(v1 && v2);
case '||':
return !!(v1 || v2);
default:
return false;
}
});
}
导出默认值()=>{
把手.注册表帮助器('ifCond',功能(v1,操作员,v2,选项){
警报(“hi”);
if(params[3]){//如果传递了4个param,则处理不区分大小写的条件。
params[0]=params[0].toLowerCase();
params[2]=params[2]。toLowerCase();
}
设v1=params[0];
let运算符=params[1];
设v2=params[2];
开关(操作员){
案例“==”:
返回(v1==v2);
案例“!=”:
返回(v1!=v2);
案例“=”:
返回(v1==v2);
案例“=”:
返回(v1>=v2);
案例“&&”:
返回!!(v1和v2);
案例“| |”:
返回!!(v1 | | v2);
违约:
返回false;
}
});
}
当我试图在我的hbs文件中访问此功能时,如下所示
{{#if (ifCond novv.ViolationId '==' noviv.ViolationId true)}}
{{log 'someVariable'}}
<br />
{{/if}}
{{#if(ifCond novv.ViolationId'='noviv.ViolationId true)}
{{log'someVariable'}}
{{/if}
我得到的错误如下:
IMS.IsLastHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == list.length - 1;
}
return false;
}
})
IMS.IsFirstHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == 0;
}
return false;
}
})
{{#each model.novs as |nov index|}}
{{#if (isFirst model.novs nov)}}
({{nov.NOVNumber}}:
{{else}}
{{nov.NOVNumber}}:
{{/if}}
{{#each nov.Violations as |novv index|}}
{{#unless (isLast nov.Violations novv)}}
{{novv.ViolationNumber}},
{{else}}
{{#if (isLast model.novs nov)}}
{{novv.ViolationNumber}}
{{else}}
{{novv.ViolationNumber}};
{{/if}}
{{/unless}}
{{/each}}
{{#if (isLast model.novs nov)}}
)
{{/if}}
{{/each}}
请提供任何帮助-提前感谢从您的示例来看,您可能正在使用非常旧的Ember版本。首先要开始的地方是打开“余烬指南”。每个指南的右上角都有一个版本选择器,可以让您返回到以前的文档。从你的例子中可以猜测,你正在与周围的事物合作
我强烈建议您更新到较新版本的ember,并使用ember cli,因为这将使助手的导入和发现过程更加顺畅,同时可以访问较新的功能和安全更新。成功了我的朋友,成功了。 这里是,以前的开发人员把所有的助手函数放在一个文件中,他造成的混乱是,他把其他文件和那些助手函数放在不同的目录中-看起来我需要清理一下。 您建议检查define帮助我查看了webpack.config.js(异步助手,异步部分),在那里,他将所有文件脚本合并并生成一个js文件,并将其写入app.js。他(或余烬,我不确定)遵循的惯例是骆驼壳。例如,对于他使用相同的ifCond.js文件编写的一个helper函数,将其转换为“replace”,我们可以将其用作handlebar中的replace
IMS.ReplaceHelper = Ember.Helper.extend({
compute(args) {
return args[0].replace(new RegExp(args[1], 'ig'), args[2]);
}
})
如果假设,如果有两个词-那么它遵循骆驼壳(你知道它)。完全完成了,我已经根据需要编写了一些我自己的帮助函数-非常感谢所有参与帮助我的人-非常感谢,我无法用语言描述我有多高兴-谢谢。我自己的助手的功能如下:
IMS.IsLastHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == list.length - 1;
}
return false;
}
})
IMS.IsFirstHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == 0;
}
return false;
}
})
{{#each model.novs as |nov index|}}
{{#if (isFirst model.novs nov)}}
({{nov.NOVNumber}}:
{{else}}
{{nov.NOVNumber}}:
{{/if}}
{{#each nov.Violations as |novv index|}}
{{#unless (isLast nov.Violations novv)}}
{{novv.ViolationNumber}},
{{else}}
{{#if (isLast model.novs nov)}}
{{novv.ViolationNumber}}
{{else}}
{{novv.ViolationNumber}};
{{/if}}
{{/unless}}
{{/each}}
{{#if (isLast model.novs nov)}}
)
{{/if}}
{{/each}}
我用如下语法调用它们:
IMS.IsLastHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == list.length - 1;
}
return false;
}
})
IMS.IsFirstHelper = Ember.Helper.extend({
compute(args) {
var list = args[0];
var item = args[1];
if (Array.isArray(list)) {
var id = list.indexOf(item);
return id == 0;
}
return false;
}
})
{{#each model.novs as |nov index|}}
{{#if (isFirst model.novs nov)}}
({{nov.NOVNumber}}:
{{else}}
{{nov.NOVNumber}}:
{{/if}}
{{#each nov.Violations as |novv index|}}
{{#unless (isLast nov.Violations novv)}}
{{novv.ViolationNumber}},
{{else}}
{{#if (isLast model.novs nov)}}
{{novv.ViolationNumber}}
{{else}}
{{novv.ViolationNumber}};
{{/if}}
{{/unless}}
{{/each}}
{{#if (isLast model.novs nov)}}
)
{{/if}}
{{/each}}
再次感谢小组中的每一个人祈祷:您使用的是什么版本的Ember?您使用的是Ember cli吗?这个帮助程序代码在文件系统中的什么位置?我不知道,但是当我尝试Ember.VERSION时,它会抛出一个错误,告诉我这不是一条可识别的命令。您需要从Ember指南开始。安装是在如何更新到更新版本的余烬,我应该如何安装?如何更新到更新版本的余烬,我应该如何安装?当我在VisualStudio代码上运行Ember命令时,我得到的都是错误,为什么我在VS代码的终端提示上得到错误?我用于React,在那里我只在VS代码终端上运行npm命令等,在Ember中不一样吗?还有一件事,我在app/helpers/print文件夹中已经有了helper函数,我可以使用hbs文件中已经存在的log helper方法,是否有任何特定的原因只有ifCond不能工作-谢谢我的朋友。你需要弄清楚你正在使用的是什么版本的Ember,以及你是否正在使用Ember cli。你有一些代码可以共享吗?我如何共享它,伙计?你如何共享代码?首先。网站上有一个很好的入门指南