我在找到我的backbone.js时会遇到问题。当我点击#login-button时,没有任何事情发生。
我也在使用iCanHaz(http://icanhazjs.com/)来加载模板。
这是我的javascript:
$(function() {
var router = new App.Router;
Backbone.history.start();
});
App.Router = Backbone.Router.extend({
routes: {
"login": "login"
},
login: function() {
var view = new App.Views.LoginView;
}
});
App.Views.LoginView = Backbone.View.extend({
el: '#login',
initialize: function() {
_.bindAll(this, 'render', 'validateLogin');
this.render();
},
render: function() {
App.Stage.html(ich.loginView());
},
events: {
'click button#login-button' : 'validateLogin'
},
validateLogin: function(event) {
console.log("validateLogin fired.");
}
});
这是我的标记(使用ICanHaz.js):
<script id="loginView" type="text/html">
<div data-role="page" id="login" class="container">
<div class="hero-unit">
<div class="row-fluid">
<div class="span12">
<div class="form-horizontal">
<fieldset>
<legend>Please login to continue</legend>
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" class="input-xlarge" id="username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" class="input-xlarge" id="password">
</div>
</div>
<div class="form-actions">
<button id="login-button" class="btn btn-primary btn-large">Login</button>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</script>
答案 0 :(得分:4)
我明白了。 Backbone在创建之前将事件绑定到el。在异步iCanHaz调用的回调中,我使用了this.setElement('#login'),它运行得很好。来自backbone.js文档:
setElement [view.setElement(element)]
“如果您想将Backbone视图应用于不同的DOM元素,请使用setElement,它还将创建缓存的$ el引用,将视图的委托事件从旧元素移动到新元素< /强>“。
答案 1 :(得分:-1)
我相信您没有正确使用View的'el'属性。尝试让属性引用jQuery DOM对象而不仅仅是ID,如下所示:
App.Views.LoginView = Backbone.View.extend({
el: $('#login')
...