Контекст объекта 'this' в событии jQuery - PullRequest
5 голосов
/ 03 мая 2011

Скажите, что я определил следующее в javascript:

com.company.long.namespace = {
    actions: {   
        add: {  
            defaults: {
                url: 'myurl/submit',
            },

            invoke: function () {   
                var submitUrl = this.defaults.url;                          
                com.company.long.namespace.foo.util.server.submit({
                    url: submitUrl,
                    success: function() { }
                });
            },
        }
    }
};

, который я затем вызываю в контексте события щелчка JQuery:

$(myElem).click(function() {
    com.company.long.namespace.actions.add.invoke();
});

Из-за того, что 'this' работает в обратных вызовах событий jQuery, this.defaults не определяется при вызове из этого контекста. Есть ли еще способ использовать «this» в этой области, без определения полного пространства имен или без использования jQuery.proxy ?

Ответы [ 2 ]

5 голосов
/ 04 мая 2011

Вы не можете вызвать add, это не функция.

Если вы вызываете функцию add.invoke, this.default является объектом по умолчанию, который вы определили в объекте add.Вам не нужно делать ничего особенного.

Пример: http://jsfiddle.net/p4j4k/

0 голосов
/ 04 мая 2011

Для вызова функции с контекстом по вашему выбору вы можете использовать .apply(context) (подробнее о function.apply и function.call ):

com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);

В функции вызова this будет ссылаться на объект контекста.
Проверьте это jsFillde пример

...