我正在尝试使用Flex中的全局变量,但它似乎无法正常工作。
在我的默认mxml文件中,我声明了以下内容
public var appID:int;
此变量用于跟踪我的应用程序中的会话ID以用于SQL目的。 在另一个mxml页面上,我调用以下代码,该代码应将全局变量更新为当前ID。
// Get the ID
sqlStatement.text =
"SELECT Max(id)FROM applications";
sqlStatement.execute();
var result:SQLResult;
result = sqlStatement.getResult();
FlexGlobals.topLevelApplication.appID = result.data[0];
最后,我使用ID作为参数运行SQL Update查询。我的问题是FlexGlobals.topLevelApplication.appID始终为0,由于某种原因,全局变量永远不会更新,我已经检查以确保result.data [0]是正确的,但值永远不会传递给全局变量。< / p>
有谁看到我在这里做错了什么? 或者是否有人有更好的建议来跟踪我的应用程序中的ID?
提前感谢您的帮助!
答案 0 :(得分:9)
我喜欢创建一个具有静态变量的“Globals”类:
package {
public class Globals {
public static var APP_ID:int;
}
}
然后在另一个类中使用:
访问它Globals.APP_ID = result.data[0];
答案 1 :(得分:1)
当我开始时,我发现mxml和AS3与Zend Framwork,php和WAMP的混合设置有点令人生畏,并且很难与Flex作为编程环境达成协议。全局变量的使用缓解了这种痛苦。
对我有用的方式......虽然我确信可能有更好的例子,但有以下内容;
首先创建一个Globals类
package
{
public class Globals
{
[Bindable] public var name : String;
[Bindable] public var email : String;
[Bindable] public var lecturersResult : CallResponder;
[Bindable] public var studentsResult : CallResponder;
[Bindable] public var datagrid_lecturers : DataGrid;
[Bindable] public var dropDownList_lecturerid : DropDownList;
[Bindable] public var DatabaseTables : Accordion;
[Bindable] public var lectAdd : Button;
// auto generated classes by Zend Framework, where references are setup here
[Bindable] public var lecturers : Lecturers;
[Bindable] public var students : Students;
public function Globals()
{
// variables initialised
name = "";
email = "";
lecturersResult = new CallResponder();
studentsResult = new CallResponder();
lectAdd = new Button();
dropDownList_lecturerid = new DropDownList();
datagrid_lecturers = new DataGrid();
DatabaseTables = new Accordion();
lecturers = new Lecturers();
students = new Students();
}
// also useful when creating functions used between classes.
public function func1()
{
}
public function func2()
{
}
public function func3()
{
}
}
}
在主项目mxml文件中我声明了一个Globals类的实例
public var g:Globals = new Globals();
使用新实例的mxml代码片段
<s:DataGrid id="datagrid_lecturers" x="10" y="10" width="860" height="300" editable="true" fontSize="12" requestedRowCount="4"
creationComplete="g.lecturersService.datagrid_lecturers_creationCompleteHandler(event,g,datagrid_lecturers,btnAddLecturer,btnDeleteLecturer,btnUpdateLecturer)"
selectionChange="g.lecturersService.datagrid_lecturers_selectionChangeHandler(event,g)">
另一个例子......
g.lecturersResult.token = g.lecturersService.getAllLecturers();
缺点是,我带着很多行李,可能比必要的更具约束力。只要数据库很小,这就行了。纯粹主义者不喜欢这种方法。 Gloabls通常被称为糟糕的编程实践......我同意这一点,但对于那些起步的人来说......这并不是一个糟糕的方式。随着您在此环境中编码变得更好/更聪明,可以在稍后使用好的编程位。
答案 2 :(得分:0)
public var appID:int;
appID将为0,直到您为其他人指定其他内容。