Javascript Backbonejs在保存成功处理程序中获取视图
我已经为此搜索了大约2个小时,但找不到任何东西,所以我就问一下 我正在尝试第一次使用Backbonejs,目前我正在尝试进行ajax调用并处理结果。我知道这可能不是应该使用的函数模型,但我只是尝试一下,想知道如何在其他情况下使用它Javascript Backbonejs在保存成功处理程序中获取视图,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我已经为此搜索了大约2个小时,但找不到任何东西,所以我就问一下 我正在尝试第一次使用Backbonejs,目前我正在尝试进行ajax调用并处理结果。我知道这可能不是应该使用的函数模型,但我只是尝试一下,想知道如何在其他情况下使用它 var Login = Backbone.Model.extend({ url: WEBSITE_PATH+'login', }); var loginView = Backbone.View.extend({ events:{ 'su
var Login = Backbone.Model.extend({
url: WEBSITE_PATH+'login',
});
var loginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this); //Returns Window object
// - - - - - ^ -> I need view object in order to get the $el and show result
}
}
$(document).ready(function(){
var login = new Login();
new loginView({ el: $('#loginForm'), model: login });
});
在模型对象中,没有返回视图的参照。
我可以全局搜索页面以显示结果,但这违背了使用主干网的目的
目标:在onSuccess中执行类似于$(this.el).find(“#result_message”).html(response.message)
我是否以错误的方式看待这个问题?我应该以不同的方式来处理这个问题,还是有办法获取视图对象?您可以使用jQuery
proxy
函数
success: $.proxy(this.onSuccess, this)
您可以使用jQuery
proxy
函数
success: $.proxy(this.onSuccess, this)
有几种方法可以解决这个问题
.bindAll
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
_.bindAll(this, 'onSuccess');
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: _.bind(this.onSuccess, this),
error: _.bind(this.onError, this)
});
},
onSuccess: function(model, response){
console.log(this);
}
});
.bind
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
_.bindAll(this, 'onSuccess');
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: _.bind(this.onSuccess, this),
error: _.bind(this.onError, this)
});
},
onSuccess: function(model, response){
console.log(this);
}
});
收听模型的更改事件
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
this.listenTo(this.model, 'change', this.onSuccess);
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
任何人都应该为你做 有几种方法可以解决这个问题
.bindAll
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
_.bindAll(this, 'onSuccess');
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: _.bind(this.onSuccess, this),
error: _.bind(this.onError, this)
});
},
onSuccess: function(model, response){
console.log(this);
}
});
.bind
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
_.bindAll(this, 'onSuccess');
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: _.bind(this.onSuccess, this),
error: _.bind(this.onError, this)
});
},
onSuccess: function(model, response){
console.log(this);
}
});
收听模型的更改事件
var LoginView = Backbone.View.extend({
events:{
'submit form': 'login'
},
initialize: function() {
this.listenTo(this.model, 'change', this.onSuccess);
},
login: function(e){
e.preventDefault();
this.model.save({
username: $(e.currentTarget).find('#username').val(),
password: $(e.currentTarget).find('#password').val()
}, {
success: this.onSuccess,
error: this.onError
});
},
onSuccess: function(model, response){
console.log(this);
}
});
任何人都应该为你做 下划线和可能是主干应用程序中更自然的选择。下划线和可能是主干应用程序中更自然的选择。感谢您提供更多的示例:)引诱主干非常困难,但我正在一点一点地做到这一点。没问题,很高兴为您提供帮助。主干是我最喜欢的JS LIB之一。谢谢你提供更多的例子:)吸引主干相当困难,但我正在一点一点地实现。没问题,很高兴能提供帮助。主干是我最喜欢的JS库之一。