Лучший подход, чтобы избежать «этого» ошибок JavaScript в XBL

StackOverflow https://stackoverflow.com/questions/4520568

Вопрос

Говорить о XBL не совсем говорит о JavaScript. Итак, я создам этот вопрос, который связан с Вот этот, но теперь о XBL, где я не создатель кода root javascript, а только методов и обработчиков событий внутри привязки.

--

В некоторых случаях this Ключевое слово может не относиться к объекту, который я ожидаю. (Последний пример: В ключевом случае, в моем XBL)

Какой лучший подход, чтобы избежать такой ошибки?

Пока я всегда использую getElementById (или же $.fn от jQuery), но я не уверен, лучший ли это подход.

--Обновить

Немного больше деталей:

Внутри XBL Метод единственный способ получить доступ к элементу, который был определен в XUL Файл (файл описания графического интерфейса) без использования «этого» (так как это может быть не «это», я ожидаю) с GetElementByID, и это делает код невозможным, поэтому я ищу альтернативы ..

Это было полезно?

Решение

Как вы слышали в другом месте, проблема в том, что this Параметр не обязательно тот объект, о котором вы впервые подумали, особенно когда вы говорите о обработчиках событий и тому подобное. Лучший способ, который я нашел, - это написать небольшую функцию, которая будет связывать некоторые объекты как this переменная и вернуть другую функцию, которая использует привязку, чтобы вызвать исходную функцию.

Взгляните на этот код:

var bindFunction = function(self, f) {
  return function() {
    return f.apply(self);
  };
};

var foo = function() {
  alert(this.hello);
};

var bar = { 
  hello: "Hello there"
};

var boundFoo = bindFunction(bar, foo);
boundFoo();

У меня есть функция, называемая bindFunction это берет объект (называемый self) и некоторая функция, и возвращает другую функцию, которая будет вызвать функцию передачи, применяя self объект как this переменная.

Остальная часть кода - это лишь какой -то тестовый код: foo функция, которая будет предупреждать this.hello, а bar объект с hello Участник, и как вы можете связать foo с bar.

По сути, я взял функцию, которая не принимает параметров и сгенерировал другую функцию, которая обеспечит первую всегда при правильной this переменная. Идеально подходит для обработчиков событий.

(Извините, но я ничего не знаю о XBL, поэтому я надеюсь, что это будет полезно.)

Другие советы

Если нет лучшего ответа, хорошим подходом можно использовать файлы JavaScript вместо XBL для реализации. Просматривая исходный код Xulrunner, выглядит так, как это делает большинство кода.

Но я все еще хотел бы использовать XBL, если бы был способ нормально работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top