Как мне соединить строку в представлении руля
Я написал вспомогательную функцию, чтобы помочь мне отформатировать 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 ответ
Чтобы сделать это, вы можете создать помощника для объединения ваших строк и передачи объединенной строки в 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, по-видимому, имеет встроенную поддержку для этого.
Я надеюсь, что это помогло, и что я не много кормил ложкой, не объясняя это должным образом.