Как мне соединить строку в представлении руля - PullRequest
0 голосов
/ 28 сентября 2018

Я написал вспомогательную функцию, чтобы помочь мне отформатировать URL, который является комбинацией некоторых атрибутов объекта.Как мне объединить этот атрибут в представлении руля?

Вспомогательная функция

const url = (link)=>{
    return process.env.URL+'/'+link.replace(/ /gi,'-').toLowerCase();
};

Мой взгляд

<a href="{{url 'samples/'+this.name+'/'+this.class+'/'+this.id}}">{{this.name}}</a>

1 Ответ

0 голосов
/ 29 сентября 2018

Что вы можете сделать для этого, это создать помощник для объединения ваших строк и передачи объединенной строки в помощник url.

В JavaScript каждая функция без стрелки имеетлокальной переменной с именем arguments назначен объект , в этом объекте вы найдете (как вы уже догадались) аргументы, переданные функции при ее вызове.

Используя этот объект arguments, мы можемсоздайте помощник для Handlebars.js, который позволит нам объединять столько строк, сколько мы захотим.

Поскольку (как описано в документации) объект arguments является массивоподобным объектом,мы должны создать из него фактический массив, который мы можем использовать для объединения всего вместе, используя Array.join, чтобы сделать его максимально простым.

Handlebars.registerHelper('concat', function() {
    return [...arguments].join('');
});

Но почему это так просто, верно?

Когда я опробовал это решение, я обнаружил, что последний элемент в объекте arguments - это объект с некоторой информацией об используемом помощнике, например, с именем.

Чтобы это работало с учетом этой небольшой информации, нам нужно нарезать массив так, чтобы последний элемент был удален, а затем объединить его.

Handlebars.registerHelper('concat', function() {
    arguments = [...arguments].slice(0, -1);
    return arguments.join('');
});

Теперь у нас есть помощникчто мы можем использовать для объединения всего, что мы хотим, осталось только передать его другому помощнику, в данном случае url.

{{url (concat 'samples/' this.name '/' this.class '/' this.id)}}

^ Я нашел комментарийо проблеме GitHub, касающейся цепочки помощников и о том, что Handlebars.js, по-видимому, имеет встроенную поддержку для этого.

Я надеюсь, что это помогло, и что я много не кормил ложкой, не объяснив это правильно.*

...