Я добавил console.log в параметр шаблона, и из журналов видно, что он срабатывает один раз для каждого параметра, найденного для данного "@...". Кроме того, item является строкой, поэтому это тоже должно быть правильно.
У вас есть предложения, что попробовать?
Код: Выделить всё
const userData = (window.PAGE_DATA?.users || []).map(u => ({
name: u.name,
id: u.id
}));
$(el).summernote({
height: 150,
placeholder: '@name...',
toolbar: [
['style', ['bold', 'italic', 'underline']],
['para', ['ul', 'ol']],
['insert', ['link']],
['view', ['codeview']]
],
hint: [
{
match: /\B@([\w\s]*)$/,
search: function (keyword, callback) {
const result = userData
.filter(u =>
u.name.toLowerCase().includes(keyword.toLowerCase())
)
.map(u => u.name);
callback(result);
},
template: function (item) {
console.log("[b]@" + item + "[/b]");
return "[b]@" + item + "[/b]";
},
content: function (item) {
return `@${item} `;
}
}
]
});

Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-options