Javascript 在AJAX调用成功时创建模型实例
我有一个用户模型:Javascript 在AJAX调用成功时创建模型实例,javascript,jquery,ajax,backbone.js,Javascript,Jquery,Ajax,Backbone.js,我有一个用户模型: var UserModel = Backbone.Model.extend({ defaults: { handle: '', email: '', uuid: '', userpic: '', tokenlogin: '' } }); 我还有一个名为UserSignIn的集合,尽管我不知道为什么: var UserSignIn = Backbone.Collection.ext
var UserModel = Backbone.Model.extend({
defaults: {
handle: '',
email: '',
uuid: '',
userpic: '',
tokenlogin: ''
}
});
我还有一个名为UserSignIn的集合,尽管我不知道为什么:
var UserSignIn = Backbone.Collection.extend({ model: UserModel });
在我的SignInView视图中,我有以下功能
signIn: function(e) {
e.preventDefault();
this.collection.fetch({
type: 'POST',
url: 'http://localhost/app/api/User.php',
dataType: "json",
data: $.param({
req: "REQUSERSIGNIN",
platform: "WEB",
useremail: $('#userSignIn #userEmail').val(),
userpass: $('#userSignIn #userPassword').val()
}),
success: function(data) {
// In here, I'd like to create an
// instance of the model which I'd
// like to pass around my app.
var user = new UserModel({
handle: data.HANDLE,
email: data.EMAIL,
uuid: data.UUIDUSER,
userpic: data.USERPIC,
tokenlogin: data.TOKENLOGIN
});
}
});
}
如您所见,我所要做的就是在BackBone.fetch()函数成功时创建一个用户实例
我想了解如何在我的应用程序中传递这个新的“user”UserModel()实例。当我尝试console.log(user)
时,我得到了一个“ReferenceError:user未定义”,很明显,我只是在fetch函数的成功回调中创建了它
有人能给我解释一下原因吗?变量
user
的作用域仅限于SignenView视图的success
函数内,因此您无法console.log(user)
从全局作用域中查找user
变量。您可以在success
函数中创建用户后立即放置console.log(user)
,以查看它是否已创建,因为这将查找局部变量user
要从应用程序访问它,您还可以声明
var user在fetch函数外部编写code>,然后在fetch
函数中简单地设置它。如果你想在主干中遵循正确的方法,你必须将它插入到你的集合中。
我认为你可以做到这一点:
在视图中的初始化中插入以下内容:
initialize: function(){
//..... your code in initialize
this.userModel = null;
this.collection = new UserCollection();
},
signIn: function(e) {
e.preventDefault();
var here = this;
this.collection.fetch({
type: 'POST',
url: 'http://localhost/app/api/User.php',
dataType: "json",
data: $.param({
req: "REQUSERSIGNIN",
platform: "WEB",
useremail: $('#userSignIn #userEmail').val(),
userpass: $('#userSignIn #userPassword').val()
}),
success: function(data) {
var user = {handle: data.HANDLE,email: data.EMAIL,uuid: data.UUIDUSER,userpic: data.USERPIC,tokenlogin: data.TOKENLOGIN};
here.userModel = new UserModel(user);
here.collection.addUser(here.userModel);
}
});
}
您的UserCollection必须如下所示:
var UserCollection = Backbone.Collection.extend({
model: UserModel,
initialize:function(){
console.log('Initialized User collection');
},
addUser: function(users, options) {
return this.add(users, options);
}
});
要控制集合中的每个元素,您可以尝试以下操作(如果您在成功函数中运行此代码,请使用此处
而不是此
):
然后如何访问userModel中的新用户?例如,我如何使用console.log查看集合的内容?使用each console来编辑我的答案,以记录集合@iggy2012中的所有模型。这些模型在全局范围内不可用?我如何将用户数据传递到我的应用程序的不同部分?可以通过此集合将用户数据传递到你的应用程序中。收藏。。。集合是您的模型的一种容器@IGGY2012我看到了。那么,我是否正确地假设您从未与模型交互,总是与集合交互?对于这个特定的应用程序,我所做的只是登录一个用户,然后让该用户的数据在应用程序中传递。
this.collection.each(function(user, index) {
console.log(user);
//if you want to set a value of your model:
user.set('email', 'yournewemail@email.it');
//if you want to get some value
user.get('email');
});