Этот ответ дает полезное объяснение того, как добавить «ссылку» (действительно, событие, перенаправляющее URL) к определенному объекту, а не ко всем объектам на холсте :Предотвращение ленивой оценки в функции, вызванной fabric.js
How to add URL to an image in Fabric.js?
Однако при размещении внутри цикла, который генерирует несколько объектов, она связывает только последний объект, созданный своей стоимости.
Вот пример:
for (var p = 0; p<2; p++) {
var object = new fabric.Circle({ radius: 10, top: 10 + 20 * p, left: 10 });
object.on('selected', function() {
window.location.href = "mylink" + "/" + p;
})
canvas.add(object);
}
Это будет иметь оба объекта, ссылающихся на «MyLink/1», когда то, что я хочу, это первый объект для ссылки на «MyLink/0», а второй для связи на «mylink/1».
Мои навыки работы с Javascript застряли в 1999 году, но это выглядит как ленивая проблема загрузки. Как заставить объект, созданный из каждого цикла, иметь свою собственную функцию?
простое решение заключается в использовании 'пусть p' вместо' вар p' - запустить его через transpiler для интернет взрывателя и вуаля –
@JaromandaX - Да. В эти дни, когда ES6 поддерживается почти везде, использование 'let' - это путь. Поскольку [это сообщение Mozilla Hacks] (https://hacks.mozilla.org/2015/07/es6-in-depth-let-and-const/) объясняет: «Циклы формы' для (пусть х ...) 'создайте новое связывание для' x' на каждой итерации. " –
Полезный. Благодаря! –