Обратный вызов при редактировании списка в CoffeeScript / JS - PullRequest
0 голосов
/ 30 марта 2012

Я хотел бы иметь возможность добавлять и удалять элементы из массива в JavaScript.Когда элемент добавляется в массив, я хотел бы, чтобы другая функция была уведомлена о том, какой элемент был добавлен.Когда элемент удален, я хотел бы, чтобы функция уведомляла о том, что было удалено.

Я использую CoffeeScript, но ответ или указание в направлении в CoffeeScript или JS было бы очень полезно.

Ответы [ 2 ]

1 голос
/ 30 марта 2012
watchMe = []

doPush = (value)->
  # do whatever

watchMe.push = ->
  doPush arguments[0]
  Array.prototype.push.apply @, arguments

# this will call doPush with 'foo', and add 'foo' to the watchMe array
watchMe.push 'foo'

Вы можете переопределить собственные Array.prototype методы в вашем массиве, вызвав вашу пользовательскую функцию, а затем родительскую функцию родного javascript.

В приведенном выше примере показано, как переопределить добавление элементов с помощью push(). Вы бы сделали то же самое для удаления элементов, используя pop(), splice() и т. Д.

Проверьте W3schools для получения подробного списка методов массива, которые вы можете перегрузить, используя метод выше.

Вот ссылка на более подробную демонстрацию coffeescript выше. Вы можете проверить локально или скопировать и вставить это на coffeescript.org

0 голосов
/ 25 декабря 2014

Еще один крутой подход - Array.observe, см. MDN .Это часть ECMA 7 Spec, но до этого вы можете использовать полифилл; -)

...