Backbone 视图中有多个 jQuery 对象
Multiple jQuery objects in Backbone view
我正在使用 JQuery 和 Backbone 构建网站,Chrome 中的最近更新似乎导致了一些奇怪的行为。这是我的 Backbone.js 视图 class:
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 在视图中工作,我必须执行以下操作:
var jq = jQuery;
var WebView = Backbone.View.extend({
initialize: function() {
console.log(jq.fn.ScrollTo); // This works.
},
});
有人知道为什么会这样吗?为什么似乎有 2 个单独的 jQuery 对象?此脚本通过 AJAX 和 运行 使用 $.parseHTML
加载。这与发生这种情况的原因有什么关系吗?
此问题已修复。事实证明,我在 HTML 模板文档中包含了两次 jQuery。第二个是延迟的,所以它在我所有其他脚本加载时加载。所以第 1 帧上的 jQuery 对象与之后的 jQuery 对象不同。
我正在使用 JQuery 和 Backbone 构建网站,Chrome 中的最近更新似乎导致了一些奇怪的行为。这是我的 Backbone.js 视图 class:
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 在视图中工作,我必须执行以下操作:
var jq = jQuery;
var WebView = Backbone.View.extend({
initialize: function() {
console.log(jq.fn.ScrollTo); // This works.
},
});
有人知道为什么会这样吗?为什么似乎有 2 个单独的 jQuery 对象?此脚本通过 AJAX 和 运行 使用 $.parseHTML
加载。这与发生这种情况的原因有什么关系吗?
此问题已修复。事实证明,我在 HTML 模板文档中包含了两次 jQuery。第二个是延迟的,所以它在我所有其他脚本加载时加载。所以第 1 帧上的 jQuery 对象与之后的 jQuery 对象不同。