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
函数中简单地设置它。

如果你想在主干中遵循正确的方法,你必须将它插入到你的集合中。 我认为你可以做到这一点:

在视图中的初始化中插入以下内容:

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');                          
});