Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2012, 19:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Правильная передача this
Есть код:
var self  = this;
        this.editor.commands.addCommand({
            name: "gotoline",
            bindKey: {win: "Ctrl-L", mac: "Command-Option-L"},
            //exec: function (){ self.showGotoLineWindow.call(self) },
            exec: this.showGotoLineWindow,
            readOnly: true
        });


Тоесть для exec нужно указать метод showGotoLineWindow моего объекта, и чтобы он вызывался с this, указывающем на мой объект.
Ответить с цитированием
  #2 (permalink)  
Старый 23.04.2012, 19:13
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

var self  = this;
        this.editor.commands.addCommand({
            name: "gotoline",
            bindKey: {win: "Ctrl-L", mac: "Command-Option-L"},
            //exec: function (){ self.showGotoLineWindow.call(self) },
            exec: function(){
                  self.showGotoLineWindow
            },
            readOnly: true
        });

А внутри своего this.editor.commands.addCommand.exec вот так:
this.editor.commands.addCommand.exec = function(func)
{
      func();
}

т.е. в exec передаешь указатель на анонимную функцию
function(){
                  self.showGotoLineWindow
            },

и там же ее вызываешь. Все вместе это называется callback-функция.
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2012, 06:03
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я не могу изменить exec, он реализован в сторонней "библиотеке". Кроме того, ваш вариант выглядит неработоспособным какимто..
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2012, 10:45
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

так, что ли?
var self  = this;
self.editor.commands.addCommand({
	name: "gotoline",
	bindKey: {
		win: "Ctrl-L",
		mac: "Command-Option-L"
	},
	exec: {
		showGotoLineWindow: function() {
			self.showGotoLineWindow.call( self );
		}
	},
	readOnly: true
});
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 24.04.2012 в 10:48.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2012, 10:57
Аватар для cmygeHm
Профессор
Отправить личное сообщение для cmygeHm Посмотреть профиль Найти все сообщения от cmygeHm
 
Регистрация: 12.10.2010
Сообщений: 196

А как называется сторонняя библиотека?
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2012, 11:22
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вот так должно быть правильно(Вы забыли про аргументы и результат функции
exec: function () {
    return self.showGotoLineWindow.apply(self, arguments);
}
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2012, 17:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от cmygeHm Посмотреть сообщение
А как называется сторонняя библиотека?
Ну, не то чтобы библиотека.. В общем редактор кода ACE (ajax.org Cloud9 Editor) - типа CodeMirror, только круче.

Тоесть мой исходный быдлокодерский закомментированный вариант и есть единственно верный? Мне оно какимто кривым казалось

Тоесть закомментированная строчка делает то что мне нужно, но я думал ее можно упростить както...

Последний раз редактировалось danik.js, 24.04.2012 в 17:25.
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2012, 22:00
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Maxmaxmахimus,
А как же IE?)
Ответить с цитированием
  #9 (permalink)  
Старый 24.04.2012, 23:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Maxmaxmахimus Посмотреть сообщение
слупки
var self  = this;
        this.editor.commands.addCommand({
            name: "gotoline",
            bindKey: {win: "Ctrl-L", mac: "Command-Option-L"},
            exec: self.showGotoLineWindow.bind(self),
            readOnly: true
        });
Спасибо, кажется то что нужно
Правда еще не проверял.

ACE при себе имеет целый комплект костылей - ща поглядел - в коде фигурирует такой код:
Код:
if (!Function.prototype.bind) {
    Function.prototype.bind = function bind(that) {
    ...
    }
}
}
Тоесть всякие ие будут хоть и прихрамывая, но работать

OFFTOP че такое "слупки" ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильная передача реферера login18 Общие вопросы Javascript 6 01.01.2012 16:58
передача в пост checkbox[on/off] в jquery dimiork Элементы интерфейса 5 15.12.2010 22:05
Передача данных из формы Eugene Общие вопросы Javascript 4 15.12.2010 11:41
правильная передача ссылки на объект в классе belbek Javascript под браузер 17 23.04.2009 23:29
передача данных между формами Yurii Общие вопросы Javascript 2 30.04.2008 20:52