Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook登录按钮和导航组出现问题_Facebook_Navigation_Titanium - Fatal编程技术网

Facebook登录按钮和导航组出现问题

Facebook登录按钮和导航组出现问题,facebook,navigation,titanium,Facebook,Navigation,Titanium,我有一个用于登录的导航组。如果用户成功登录,该应用程序将关闭导航组(使用navGroup.close,我认为它已被销毁),并创建一个选项卡组。当用户注销时,选项卡组关闭,导航组再次创建。问题是facebook登录按钮(位于导航组上)在第一次创建导航组时工作正常,但第二次执行“登录”侦听器2次,第三次执行3次,依此类推。 下面是生成此错误的简化代码: app.js Ti.App.Properties.setString("fbAccess","login"); Ti.Facebook.appid

我有一个用于登录的导航组。如果用户成功登录,该应用程序将关闭导航组(使用navGroup.close,我认为它已被销毁),并创建一个选项卡组。当用户注销时,选项卡组关闭,导航组再次创建。问题是facebook登录按钮(位于导航组上)在第一次创建导航组时工作正常,但第二次执行“登录”侦听器2次,第三次执行3次,依此类推。 下面是生成此错误的简化代码:

app.js

Ti.App.Properties.setString("fbAccess","login");

Ti.Facebook.appid = 'xxxxxxxxxx';
Ti.Facebook.permissions = ['publish_stream','offline_access','email'];
//Ti.Facebook.forceDialogAuth = false;
Ti.include('preLogin.js');
loginFBC.js

Ti.Facebook.addEventListener('login', function(e) {

   Ti.API.info("inside login"); 

   if ((e.success) && (Ti.App.Properties.getString("fbAccess")=="login")) {
                        Ti.API.info("inside if");   

                     navGroup.close();
                     Ti.include('preLogin.js');
                       }});
预登录

var buttonLoginFB = Titanium.UI.createButton({
     top: "90%",
     width: "70%",
     height: "12%"});

var preLoginWin = Titanium.UI.createWindow({  
    titleImage:'/icons/logoForBar.png',     
    title:"Back",
    backgroundColor:'#fff',
    barColor:'00aeef',
   });
var buttonLogin = Titanium.UI.createButton({
     title: 'Login',
     top: "30%",
     width: "70%",
     height: "12%",
     opacity:1
    });

var buttonRegister = Titanium.UI.createButton({
     title: 'Register',
     top: "60%",
     width: "70%",
     height: "12%",
     opacity:1

    });




    var navGroup = Ti.UI.iPhone.createNavigationGroup({
                    window:preLoginWin
    });

    preLoginWin.add(buttonLogin,buttonRegister,buttonLoginFB);

    var main = Ti.UI.createWindow();

    main.add(navGroup); 
    main.open();

Ti.include('/loginFBC.js');
//include the preLoginC.js that holds the code for the buttons listeners
Ti.include('/preLoginC.js');
和preLoginC.js

buttonLoginFB.addEventListener("click", function(e) {

Ti.API.info("button");

Ti.Facebook.logout();
Ti.Facebook.appid = 'xxxxxxxxxxx';
Ti.Facebook.permissions = ['publish_stream','offline_access','email'];
//Ti.Facebook.forceDialogAuth = false;
Ti.Facebook.authorize();


});

您真的应该重新考虑如何布局您的应用程序,首先,您定义的所有内容都在全局javascript命名空间中,这是一个非常糟糕的想法:参考

第二件您可能不应该做的事情是使用带有选项卡栏的导航组。相反,为什么不用这样的一次性模式打开一个新窗口呢

var modalWindow = Ti.UI.createWindow({...formatting here...});
modalWindow.open({modal : true});
抛开不好的做法不谈,您看到多个facebook窗口弹出窗口的原因是您在buttonLoginFB按钮中添加了多个事件侦听器。发生这种情况是因为在授权Facebook时包含了preLogin.js,而Facebook又包含了preLoginC.js,后者正在添加您的侦听器

要解决这个问题,您需要根据Tianium最佳实践更改您的通用体系结构。将UI元素移动到一个更安全的命名空间中,并且不要在事件侦听器中包含Javascript文件,这总是会导致问题


希望这有帮助

你能找到解决这个问题的办法吗