骨干网视图中的多个jQuery对象

时间:2018-07-19 07:19:56

标签: jquery backbone.js

我正在使用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,但是只能从视图外部进行访问,例如:

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. 
    },
});

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

1 个答案:

答案 0 :(得分:0)

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