我阅读了20多篇不同的文章和论坛主题,尝试了不同的解决方案,但我没有应对。 以下代码不起作用。我需要别人的帮助......
LoginView.js
var LoginView = Backbone.View.extend({
//el: $('#page-login'),
initialize: function() {
_.bindAll(this, 'gotoLogin', 'render');
//this.render();
},
events: {
'click #button-login': 'gotoLogin'
},
gotoLogin : function(e){
e.preventDefault();
$('#signup-or-login').hide();
$('#login').show();
return true;
}
});
的login.html
<div data-role="page" id="page-login">
<!-- SignUp or Login section-->
<div id="signup-or-login" data-theme="a">
<a data-role="button" data-theme="b" id="button-signup"> Sign Up </a>
<a data-role="button" data-theme="x" id="button-login"> Login </a>
</div>
<!-- Login section-->
<div id="login" data-theme="a">
<button data-theme="b"> Login </button>
<button data-theme="x"> Cancel </button>
</div>
</div>
该页面是在Backbone.Router扩展类的方法中创建的。
loadPage('login.html', new LoginView());
答案 0 :(得分:1)
根据我的理解,$.mobile.loadPage()
抓取所需的html并将其附加到DOM。
目前,您正在尝试在el
实例化后设置View
。
但请注意,Backbone.View会附加el
和$el
when it's instantiated:
var View = Backbone.View = function(options) {
...
this._ensureElement();
this.initialize.apply(this, arguments);
this.delegateEvents();
};
另请注意View.setElement()
通过传递一个反对$el
的选择器或jQuery来设置View.el
:
setElement: function(element, delegate) {
if (this.$el) this.undelegateEvents();
this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
this.el = this.$el[0];
if (delegate !== false) this.delegateEvents();
return this;
}
在实例化时,您需要设置el
(在您的情况下使用提供的jQuery对象):
// Where `view` is a reference to the constructor, not an instantiated object
var loadPage = function(url, view) {
$.mobile.loadPage(url, true).done(function (absUrul, options, page) {
var v,
pageId = page.attr('id');
v = new view({
el: page
});
...
}
}
您现在就像这样致电loadPage()
:
loadPage('login.html', LoginView);
这会为Backbone.View
$el
委派您的活动。