我正在使用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
运行的。这与为什么会发生这种情况有什么关系吗?
1条答案
按热度按时间uz75evzq1#
这个问题已经解决了。事实证明,我在HTML模板文档中包含了两次jQuery。第二次是延迟的,所以它在我所有其他脚本加载时加载。所以第一帧上的jQuery对象与之后的jQuery对象不同。