我正在使用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
运行。这与发生这种情况有什么关系吗?
答案 0 :(得分:0)
此问题已解决。事实证明,我在HTML模板文档中两次包含了jQuery。第二个脚本被延迟,因此在加载所有其他脚本时将其加载。因此,第1帧上的jQuery对象与之后的jQuery对象不同。