Múltiples objetos jQuery en la vista Backbone
Estoy usando JQuery y Backbone para crear un sitio web, y parece que una actualización reciente en Chrome ha causado un comportamiento extraño. Aquí está mi clase de vista Backbone.js:
var WebView = Backbone.View.extend({
el: '#WebView',
initialize: function() {
... // Do initialize actions
// Arm the featured works link.
this.$featuredWorks = $('a[href^="#"]').on('click',this.scrollTo);
},
scrollTo: function(e) {
e.preventDefault();
$(e.currentTarget.getAttribute('href')).ScrollTo();
},
});
La cosa es que el objeto jQuery funciona de manera diferente dentro del objeto Ver en lugar de fuera de él. He importado una extensión jQuery que agrega$.fn.ScrollTo
a jQuery, pero solo es accesible desde fuera de la vista, al igual que
console.log($.fn.ScrollTo); // Returns the function.
var WebView = Backbone.View.extend({
initialize: function() {
console.log($.fn.ScrollTo); // Returns null.
},
});
Así, para que ScrollTo funcione dentro de la Vista, tengo que hacer lo siguiente:
var jq = jQuery;
var WebView = Backbone.View.extend({
initialize: function() {
console.log(jq.fn.ScrollTo); // This works.
},
});
¿Alguien sabe por qué este es el caso? ¿Por qué parece haber 2 objetos jQuery separados? Este script se carga a través de AJAX y se ejecuta usando$.parseHTML
. ¿Tiene esto algo que ver con por qué sucede esto?