Backbone.js 视图中的多个jQuery对象

bn31dyow  于 2022-11-10  发布在  jQuery
关注(0)|答案(1)|浏览(127)

我正在使用JQuery和Backbone来建立一个网站,似乎Chrome最近的一次更新导致了一些奇怪的行为。下面是我的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();
    },
});

问题是,jQuery对象在View对象内部和外部的工作方式不同。我已经导入了一个jQuery扩展,它将$.fn.ScrollTo添加到jQuery中,但是它只能从View外部的访问,如下所示:

console.log($.fn.ScrollTo); // Returns the function.
var WebView = Backbone.View.extend({
    initialize: function() {
        console.log($.fn.ScrollTo); // Returns null.
    },
});

因此,要让ScrollTo在View中工作,我必须执行以下操作:

var jq = jQuery;
var WebView = Backbone.View.extend({
    initialize: function() {
        console.log(jq.fn.ScrollTo); // This works. 
    },
});

有人知道为什么会这样吗?为什么会有两个独立的jQuery对象?这个脚本是通过 AJAX 加载的,并使用$.parseHTML运行的。这与为什么会发生这种情况有什么关系吗?

uz75evzq

uz75evzq1#

这个问题已经解决了。事实证明,我在HTML模板文档中包含了两次jQuery。第二次是延迟的,所以它在我所有其他脚本加载时加载。所以第一帧上的jQuery对象与之后的jQuery对象不同。

相关问题