我有一个用户模型:
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:用户未定义”,显然我刚刚在fetch函数的成功回调中创建了它。
有人可以向我解释原因吗?
答案 0 :(得分:1)
在视图中初始化插入此内容:
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);
}
});
要控制集合中的每个元素,您可以尝试此操作(如果您在成功函数中运行此代码,请使用here
而不是this
):
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');
});
答案 1 :(得分:0)
变量user
的范围仅限于SignInView视图的success
函数内,因此您无法console.log(user)
从user
查找console.log(user)
变量全球范围。您可以在success
函数中创建用户后立即放置user
以查看它是否已创建,因为这会找到局部变量var user;
。
要从应用中访问它,您还可以在获取功能之外声明fetch
,然后只需在{{1}}功能中设置它。