__defineSetter__ на innerHTML останавливает его от рендеринга - PullRequest
0 голосов
/ 27 мая 2010

Я пытаюсь создать метод наблюдения для элементов HTML, используя __define[GS]etter__ при изменении свойства.Он прекрасно реагирует, когда я устанавливаю значение, но если прослушиваемым свойством является innerHTML, он каким-то образом не может отобразить данную строку.Так что в основном, когда я добавляю что-то в innerHTML, это не отображается.

Я использую метод watch, описанный в предыдущем вопросе: Наблюдайте за изменениями свойств объекта в JavaScript

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 мая 2010

ОК, обновление. Я нашел эту страницу на MSDN, которая имеет именно то, что мне нужно: http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx

Но Object.getOwnPropertyDescriptor способ делать вещи, очевидно, работает только в IE. Облом. Любые идеи будут оценены.

0 голосов
/ 27 мая 2010

Я нашел еще одну веб-страницу с чем-то интересным, но я не мог заставить ее делать то, что хотел: http://www.refactory.org/s/recent/tag/accessors

На данный момент я решил найти обходной путь - что-то с таймером, который проверяет атрибут на наличие изменений и evnets изменений атрибута для браузеров, которые поддерживают это.

Но если кто-нибудь найдет решение вопроса, пожалуйста, пост:)

0 голосов
/ 27 мая 2010

Этот код-шим фактически не выполняет сквозную запись: когда вы устанавливаете свойство, значение запоминается только в оболочке-наблюдателе и не передается базовому объекту. Он предназначен для чисто JavaScript-объектов, свойства которых не имеют побочных эффектов (например, изменение DOM, в случае innerHTML).

Было бы затруднительно выполнить сквозную запись, поскольку нет способа напрямую вызвать установщик прототипа. Вам придется временно удалить свойство, записать в базовое свойство, а затем вернуть его на место.

Однако не стоит преследовать ИМО. Узлам DOM разрешено быть "хост-объектами", поэтому нет никакой гарантии, что какая-либо функция свойств объекта native-JavaScript будет работать с ними вообще.

(В любом случае добавление новых членов в прототип Object обычно считается действительно плохой идеей.)

Я мог бы просто не слушать изменения innerHTML

Я думаю, что лучше, да.

...