Я получаю сообщение об ошибке: Ошибка компиляции: ifCond не является помощником, когда я пытаюсь написать вспомогательную функцию в Ember - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть вспомогательная функция (ifCond) в ember.js, как показано ниже

 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;
    }
    });
}

, когда я пытаюсь получить доступ к этой функции в моем файле hbs, как показано ниже

                                                    {{#if (ifCond novv.ViolationId '==' noviv.ViolationId true)}}
                                                    {{log 'someVariable'}}
                                                    <br />
                                                    {{/if}}

Iполучаю ошибку, как показано ниже:

Любая помощь, пожалуйста - заранее спасибо

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Из вашего примера видно, что вы работаете с очень старой версией Ember. Первое, с чего начать, - это Ember Guide по пишущим помощникам . В правом верхнем углу каждого руководства есть селектор версий, который вернет вас к предыдущей документации. Примером вашего предположения является то, что вы работаете с чем-то вроде 1.11 .

I очень бы рекомендовал обновить вашу версию ember и использовать ember- поскольку это значительно упростит процесс импорта и обнаружения помощников, а также позволит получить доступ к новым функциям и обновлениям безопасности.

0 голосов
/ 14 ноября 2019

Сделал это мой друг, готово. Вот он, предыдущий разработчик поместил все вспомогательные функции в один файл, путаница, которую он создал, заключалась в том, что он поместил другие файлы с этими вспомогательными функциями в разные каталоги - кажется, мне нужно это почистить. И ваше предложение проверить определение помогло мне заглянуть в webpack.config.js (async helpers, async __parts), там он объединяет все сценарии файлов и генерирует их в виде одного файла js, который записывается в app.js. Конвенция, которой он (или Эмбер, я не уверен) следовал, была верблюжьей оболочкой. Например, для одной вспомогательной функции, которую он написал, как показано ниже, с тем же файлом ifCond.js, преобразованным как «replace», мы можем использовать его как 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}}

Еще раз спасибо всем в этой группе. : Молись:

...