簡體   English   中英

合金MVC框架鈦網(模型)

[英]Alloy MVC Framework Titanium Network (Model)

我正在嘗試使用Alloy中的模型進行身份驗證。 從昨天開始,我一直在努力解決這個問題。 如果有人可以幫助我,我將非常感激。 因此,我有一個視圖login.xml ,然后是一個控制器login.js login.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單擊login時,它將在index.js調用函數login 所以,現在的問題是,當我第一次單擊該按鈕時,我從alert(_this.get('email'))收到一個空警報,但是當我第二次單擊該按鈕時,一切正常,它會提醒電子郵件。 我不知道發生了什么事。 感謝您的幫助。

對於那些可能偶然發現相同問題的人,我想我已經解決了。 我使用回調函數來做到這一點。

請參考此Titanium HTTP請求

現在我的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!');
   }
}

謝謝。 我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM