【问题标题】:Alloy MVC Framework Titanium Network (Model)合金MVC框架钛网(模型)
【发布时间】:2013-10-31 15:51:38
【问题描述】:

我正在尝试使用合金中的模型进行身份验证。从昨天开始,我一直在尝试解决这个问题。如果有人可以帮助我,我将不胜感激。 所以,我有一个视图login.xml,然后是一个控制器login.jslogin.js 包含以下函数:

var user = Alloy.Models.user; //my user.js model
function login(e) {
    if($.username.value !== '' && $.password.value !== ''){
        if(user.login($.username.value, $.password.value)){
            Alloy.createController('home').getView().open();
            $.login.close();
        }
    }else{
        alert('Username and/or Password required!');
    }
}

然后在我的user.js 模型中,是这样的:

extendModel : function(Model) {
    _.extend(Model.prototype, {
        login: function(username, password) {
            var first_name, last_name, email;
            var _this = this;
            var url = 'http://myurl.com/test.php';
            var auth = Ti.Network.createHTTPClient({
                onerror: function(e){
                    alert(e.error);
                },
                onload: function(){
                    var json = this.responseText;
                    var response = JSON.parse(json);
                    if(response.logged == true){
                        first_name = response.f_name;
                        last_name = response.l_name;
                        email = response.email;
                        _this.set({
                            loggedIn: 1,
                            username: email,
                            realname: first_name + ' ' + last_name,
                            email: email,
                        });
                        _this.save();
                    }else{
                        alert(response.message);
                    }
                },
            });

            auth.open('POST', url);
            var params = {
                usernames: username,
                passwords: password,
            };
            auth.send(params);
            alert(_this.get('email')); //alert email
        },
    });

当我在login.xml 中单击登录时,它会在index.js 中调用函数login。所以,现在我的问题是,当我第一次单击该按钮时,我从alert(_this.get('email')) 收到一个空警报,但是当我第二次单击该按钮时,一切正常,它会提醒电子邮件。我不知道是怎么回事。谢谢你的帮助。

【问题讨论】:

    标签: javascript backbone.js titanium titanium-alloy


    【解决方案1】:

    我想我想通了,对于那些可能会遇到同样问题的人。我用回调函数来做。

    参考这个Titanium HTTP Request

    现在我的user.js 看起来像这样:

    extendModel : function(Model) {
    _.extend(Model.prototype, {
        login: function(username, password, callback) {
            var first_name, last_name, email;
            var _this = this;
            var url = 'http://myurl.com/test.php';
            var auth = Ti.Network.createHTTPClient({
                onerror: function(e){
                    alert(e.error);
                },
                onload: function(){
                    var json = this.responseText;
                    var response = JSON.parse(json);
                    if(response.logged == true){
                        first_name = response.f_name;
                        last_name = response.l_name;
                        email = response.email;
                        _this.set({
                            loggedIn: 1,
                            username: email,
                            realname: first_name + ' ' + last_name,
                            email: email,
                        });
                        _this.save();
                        callback(foo); //whatever you want to send
    
                    }else{
                        alert(response.message);
                    }
                },
            });
    
            auth.open('POST', url);
            var params = {
                usernames: username,
                passwords: password,
            };
            auth.send(params);
        },
    });
    

    而我的login.js 看起来像这样:

    var user = Alloy.Models.user; //my user.js model
    function login(e) {
        if($.username.value !== '' && $.password.value !== ''){
            var logged_in = user.login($.username.value, $.password.value, function(foo){
                if(foo == bar)
                    call_another_function(); 
            });
        }else{
           alert('Username and/or Password required!');
       }
    }
    

    谢谢。我希望这会有所帮助。

    【讨论】:

    • 这段代码仍然不正确......你应该总是执行回调......你不是在错误条件下执行它
    • @AaronSaunders 为什么要在onerror 上执行回调?我假设您处理onerror 的方式与在回调中不同。我想如果错误登录存在于回调中就可以了,但我宁愿将这两个函数分开
    • @Ronnie 我会假设调用者想知道发生了错误以便可以正确处理?
    • @AaronSaunders 我认为回调是为了成功,而 onerror 是为了处理错误。我正在从经典过渡到合金,所以我从上周开始尝试找出合金模型。慢慢进步
    • 谢谢@AaronSaunders。我在错误上添加了回调。抱歉回复晚了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多