Javascript Can';t在Backbone.js视图中调用jQuery UI函数
我有一个web应用程序,我使用Backbone.js 在登录视图中,我使用jqueryui按钮。 在模板代码中,我调用Javascript Can';t在Backbone.js视图中调用jQuery UI函数,javascript,jquery-ui,javascript-events,backbone.js,Javascript,Jquery Ui,Javascript Events,Backbone.js,我有一个web应用程序,我使用Backbone.js 在登录视图中,我使用jqueryui按钮。 在模板代码中,我调用$(“.btn”).button()没有问题 但当我想在用户点击按钮并呼叫后采取行动时: $('#btnSubmit').button({ disabled : true, label : "Logging in..." }); 我得到一个错误:“未捕获类型错误:对象[Object Object]没有方法‘按钮’”(从chrome devTools控制台复制) 奇怪
$(“.btn”).button()代码>没有问题
但当我想在用户点击按钮并呼叫后采取行动时:
$('#btnSubmit').button({
disabled : true,
label : "Logging in..."
});
我得到一个错误:“未捕获类型错误:对象[Object Object]没有方法‘按钮’”(从chrome devTools控制台复制)
奇怪的是,如果我在chromeDevtools控制台中运行这些代码行,它可以完美地工作!
我认为这与DOM和偶数触发时我所处的状态有关。
知道问题出在哪里吗?
一些细节:
Including the jQuery UI library:
define([
'jQuery',
'jQueryui',
/*...*/
], function($, jQueryui,...) {
var loginView = Backbone.View
.extend({
/*...*/
events : {
"click #btnSubmit" : "login"
},
/*...*/
login : function() {
$('#btnSubmit').button({
disabled : true,
label : "Logging in..."
});
},
}
});
return new loginView;
});
编辑:
我尝试了Stephen solution并尝试使用:
this.$el.find('#btnSubmit').button({
disabled : true,
label : "Logging in..."
});
仍然不起作用。
我想这意味着我无法访问所有jQuery UI功能。尝试的一件事是像这样查找元素:
this.$el.find('#btnSubmit').button({
disabled : true,
label : "Logging in..."
});
即使文档没有附加到DOM,您也可以查找它。这是我唯一的猜测,因为我假设所有jquery导出都已正确设置。我发现了错误:
我应该这样使用传递给函数的jQueryUI引用:
jQueryui('#btnSubmit').button({
disabled : true,
label : "Logging in..."
});
感谢你说的“jquery导出设置正确”是什么意思?看起来你在使用requirejs。jQuery不只是对requirejs“起作用”(至少上次我检查时是这样),还需要做一些工作来确保requirejs知道在包含jQuery时返回什么。jQueryUI也是如此。因此,假设您已经解决了这个问题。在定义视图之前,请尝试使用“console.log($.browser)”。你应该得到一些关于你的浏览器的信息。如果在控制台中得到未定义的/null/empty响应,您就知道jquery没有正确连接代码>正在工作。问题只出在jQueryUIWell身上,不幸的是,我也被难倒了。我需要看更多的代码,jquery ui是如何连接的,requirejs的配置是什么样子的,等等。我最后想到的是,在我使用jquery ui的项目中,我们在配置中指定了一个“shim:{shim:{'lib/jquery ui':{deps:['jquery']}}}不确定这是否有帮助。。但是值得一试。