Javascript 我得到的错误是:编译错误:当我试图在Ember中编写助手函数时,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.

我在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.
            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。你有一些代码可以共享吗?我如何共享它,伙计?你如何共享代码?首先。网站上有一个很好的入门指南