Facebook登录按钮和导航组出现问题
我有一个用于登录的导航组。如果用户成功登录,该应用程序将关闭导航组(使用navGroup.close,我认为它已被销毁),并创建一个选项卡组。当用户注销时,选项卡组关闭,导航组再次创建。问题是facebook登录按钮(位于导航组上)在第一次创建导航组时工作正常,但第二次执行“登录”侦听器2次,第三次执行3次,依此类推。 下面是生成此错误的简化代码: app.jsFacebook登录按钮和导航组出现问题,facebook,navigation,titanium,Facebook,Navigation,Titanium,我有一个用于登录的导航组。如果用户成功登录,该应用程序将关闭导航组(使用navGroup.close,我认为它已被销毁),并创建一个选项卡组。当用户注销时,选项卡组关闭,导航组再次创建。问题是facebook登录按钮(位于导航组上)在第一次创建导航组时工作正常,但第二次执行“登录”侦听器2次,第三次执行3次,依此类推。 下面是生成此错误的简化代码: app.js Ti.App.Properties.setString("fbAccess","login"); Ti.Facebook.appid
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文件,这总是会导致问题
希望这有帮助 你能找到解决这个问题的办法吗