Question

Disons que j'ai défini les éléments suivants en 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() { }
                });
            },
        }
    }
};

que j'appelle ensuite dans le contexte d'un événement de clic JQuery:

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

En raison de la façon dont 'this' fonctionne dans les rappels d'événements jQuery, this.defaults n'est pas défini lorsqu'il est appelé à partir de ce contexte.Est-il possible de toujours utiliser 'this' dans ce cadre, sans avoir à définir l'espace de noms complet, ou sans utiliser jQuery.proxy ?

Était-ce utile?

La solution

Vous ne pouvez pas appeler add, ce n'est pas une fonction.

Si vous appelez la fonction add.invoke, this.default est l'objet par défaut que vous avez défini dans l'objet add.Vous n'avez rien à faire de spécial.

Exemple: http://jsfiddle.net/p4j4k/

Autres conseils

Pour appeler une fonction avec un contexte de votre choix, vous pouvez utiliser .apply(context) (plus d'informations sur function.apply et function.call ):

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

Dans la fonction d'appel, this fera référence à l'objet de contexte.
Consultez cet exemple jsFillde

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top