RaphaelJS Set.forEach () - PullRequest
       1

RaphaelJS Set.forEach ()

9 голосов
/ 27 января 2012

Я прочитал в документации Raphaeljs описание Set.forEach , и не могу понять как это устроено. Пожалуйста, кто-нибудь может дать мне пример использования.

Ответы [ 3 ]

18 голосов
/ 27 января 2012

Вот вам рабочий пример:

http://jsfiddle.net/9X6rM/

И это важная часть этого:

set.forEach(function(e){
    e.attr({fill:'#000'})
})

Сначала немного сложно, но довольно удобно, когда вы его получаете. Вам необходимо передать методу forEach() функцию, которую вы хотите выполнить для каждого элемента, и эта функция должна иметь, как аргумент, имя переменной для привязки к элементу. Так что в этом случае e - это обрабатываемый прямоугольник. Понял?

3 голосов
/ 27 января 2012

Эта тема очень полезна для понимания того, как forEach работает

Редактировать:

У вас есть рабочий пример в документации Raphaël

Raphael.el.red = function () {
    this.attr({fill: "#f00"});
};
Raphael.st.red = function () {
    this.forEach(function (el) {
        el.red();
    });
};
// then use it
paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();
2 голосов
/ 05 марта 2013

Некоторые вещи, которые отсутствуют в документации Raphael forEach:

Что передается в определяемую вами функцию

set.forEach(function(element, index){
    element.attr({fill:'#000'});
    alert('This is the element that can be accessed as set['+index+']');
})

Передано два аргументак функции обратного вызова:

  1. Элемент Raphael, который просматривается в данный момент.
  2. Номер индекса, указывающий положение этого элемента Raphael в наборе.

this в объеме цикла Рафаэля forEach не отличается от окружающей функции (в отличие от jQuery .each()).

Возможные сбои или неожиданное поведение

  • В отличие от функции jQuery .each(), у Рафаэля .forEach() происходит сбой, если ему передан отдельный элемент Raphael вместо набора.Если переменная может содержать один элемент или может содержать набор из нескольких элементов, проверьте, к какому типу объекта Рафаэля она относится в первую очередь .
  • Как уже упоминалось, .forEach() Рафаэля не создаетзамыкание, как в jQuery - на самом деле это просто итерация по массиву.Переменные в каждой итерации не «замораживаются» в этой итерации, их можно перезаписать следующими итерациями.
...