(извлеченный некоторое объяснение, которое было скрыто в комментариях в другом ответе),
Проблема заключается в следующей строке:
this.dom.addEventListener("click", self.onclick, false);
Здесь, Вы передаете функциональный объект, который будет использоваться в качестве обратного вызова. Когда триггер события, функция вызвана, но теперь это не имеет никакой связи ни с каким объектом (это).
Проблема может быть решена путем обертывания функции (с, он - ссылка на объект) в закрытии следующим образом:
this.dom.addEventListener(
"click",
function(event) {self.onclick(event)},
false);
Так как переменной сам присвоили это, когда закрытие было создано, функция закрытия будет помнить значение сам переменная, когда это звонило в более позднее время.
Альтернативный способ решить это состоит в том, чтобы сделать служебную функцию (и избегать использования переменных для привязки этого):
function bind(scope, fn) {
return function () {
fn.apply(scope, arguments);
};
}
Обновленный код был бы затем похож:
this.dom.addEventListener("click", bind(this, this.onclick), false);
Function.prototype.bind
часть ECMAScript 5 и обеспечивает ту же функциональность. Таким образом, можно сделать:
this.dom.addEventListener("click", this.onclick.bind(this), false);
Для браузеров, которые еще не поддерживают ES5, MDN обеспечивает следующий контейнер:
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5 internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP
? this
: oThis || window,
aArgs.concat(Array.prototype.slice.call(arguments)));
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
это - одна из самых запутывающих точек JS: 'эта' переменная значит для большей части локального объекта..., но функции являются также объектами, таким образом, 'это' указывает там. Существуют другие тонкие моменты, но я не помню их всех.
Я обычно избегаю использования 'этого', просто определяю локальное 'меня' переменная и использование это вместо этого.
Для filezilla необходимо установить FTP-сервер. https://help.ubuntu.com/12.04/serverguide/ftp-server.html Это позволит Вам соединяться со своим экземпляром при помощи порта 21. IP:21. Но предупреждая, один только FTP может быть проблемой безопасности, особенно если этот сервер доступен внешним IP.
Что касается MySQL Workbench http://dev.mysql.com/doc/workbench/en/wb-new-server-instance-wizard.html похоже, что это полагается на соединение SSH. Таким образом, необходимо будет установить ssh сервер на той машине также. https://help.ubuntu.com/11.04/serverguide/openssh-server.html я думаю, что Вы, возможно, должны были бы работать "/etc/init.d/mysql, состояние" как первый участник упомянуло. SSH не мог бы быть достаточно.
я не знаю, является ли mysql уже установкой на том сервере, но смотрите на это также https://help.ubuntu.com/11.04/serverguide/mysql.html
Для jQuery пользователи, ищущие решение этой проблемы, необходимо использовать jQuery.proxy
Хорошее объяснение проблемы (мне описали проблемы, поняв решения до сих пор) доступно здесь .