Arrays AS3为不同的项目分离数组
我有一个函数,它在关联数组中创建一个新值Arrays AS3为不同的项目分离数组,arrays,list,actionscript-3,associative-array,Arrays,List,Actionscript 3,Associative Array,我有一个函数,它在关联数组中创建一个新值 var array:Array = new Array(new Array()); var i : int = 0; function personVelgLand(evt:MouseEvent) { for(i = 0; i < personListe.dataProvider.length; i++) { if(txtPersonVelg.text == personListe.dataProvider.get
var array:Array = new Array(new Array());
var i : int = 0;
function personVelgLand(evt:MouseEvent)
{
for(i = 0; i < personListe.dataProvider.length; i++)
{
if(txtPersonVelg.text == personListe.dataProvider.getItemAt(i).label)
{
personListe.dataProvider.getItemAt(i).reise = array;
personListe.dataProvider.getItemAt(i).reise.push(landListe.selectedItem.land);
}
}
}
现在它们不一样了,但现在列表中的每个项都不能有多个.reise值
编辑2:dataProvider什么都不是,没有它也可以正常工作。reise是在我最初发布的函数中创建的,它在对象getItemAt(I)
中创建。reise
PersonList是用户通过使用输入文本字段将自己的项目添加到的列表。它由以下函数给出:
function regPerson(evt:MouseEvent)
{
regPersoner.push(txtRegPerson.text);
personListe.addItem({label:regPersoner});
regPersoner = new Array();
txtRegPerson.text = "";
}
编辑3:用户可以在列表中注册转换为标签的名称。还有3个国家的名单,西班牙、葡萄牙和英国。然后,用户可以向他们选择的人注册一个国家。这时我想在第一个列表中的“名称”项中创建.reise,该列表包含他们选择的国家。我希望每个名字都能够选择多个国家,然后在元素中创建这些国家。请在保存其名字的项目中重新输入。如果我能使用字符串,这将很容易。但后来我计划在一个国家中输入用户类型,然后显示选择该国家的每个用户。这就是为什么国家/地区需要作为数组存储在“名称”项中。您应该首先为正在建模的
用户
数据创建一个类。你已经知道所有的属性了
- 用户可以注册名称
- 然后,用户可以向他们选择的人注册一个国家
- 能够选择多个国家/地区
package
{
public class User
{
private var _name:String;
private var _countries:Array;
public function User(name:String)
{
_name = name;
_countries = [];
}
public function get name():String
{
return _name;
}
public function get countries():Array
{
return _countries;
}
public function set countries(value:Array):void
{
_countries = value;
}
}
}
users.addEventLsitener(Event.CHANGE, onUserSelected);
function onUserSelected(e:Event):void
{
countries.selectedItems = users.selectedItem.countries;
}
countries.addEventLsitener(Event.CHANGE, onCountrySelected);
function onCountrySelected(e:Event):void
{
users.selectedItem.countries = countries.selectedItems;
}
现在创建一个数据提供者
,用该类的对象填充它,并将其用于列表:
要从用户
对象获取标签,请定义
这样,您就不必添加类中不需要的标签
属性
选择名称意味着选择用户。与该名称关联的国家/地区列表应显示在第二个
列表中
该列表的数据提供者
保持不变,即所有可用国家/地区的列表
import fl.controls.List;
import fl.data.DataProvider;
// list of users
var users:List = new List();
addChild(users);
users.move(150,150);
users.labelFunction = userLabelFunction;
function userLabelFunction(item:Object):String
{
return item.name;
}
users.dataProvider = new DataProvider([
new User("David"),
new User("Colleen"),
new User("Sharon"),
new User("Ronnie"),
new User("James")]);
// lsit of countries
var countries:List = new List();
addChild(countries);
countries.move(550,150); // adjut position as desired
countries.dataProvider = new DataProvider([
{label:"a"},
{label:"b"},
{label:"c"},
{label:"d"},
{label:"e"},
{label:"f"}]);
现在你所要做的就是把它连接起来。如果选择了用户,请在国家/地区列表中选择其国家/地区。如果选择了某个国家/地区,请将其添加到当前选择的用户国家/地区列表中。可能看起来像这样:
package
{
public class User
{
private var _name:String;
private var _countries:Array;
public function User(name:String)
{
_name = name;
_countries = [];
}
public function get name():String
{
return _name;
}
public function get countries():Array
{
return _countries;
}
public function set countries(value:Array):void
{
_countries = value;
}
}
}
users.addEventLsitener(Event.CHANGE, onUserSelected);
function onUserSelected(e:Event):void
{
countries.selectedItems = users.selectedItem.countries;
}
countries.addEventLsitener(Event.CHANGE, onCountrySelected);
function onCountrySelected(e:Event):void
{
users.selectedItem.countries = countries.selectedItems;
}
完整代码可能如下所示。我没有测试这个,但你明白了
// list of users
var users:List = new List();
addChild(users);
users.move(150,150);
users.labelFunction = userLabelFunction;
function userLabelFunction(item:Object):String
{
return item.name;
}
users.dataProvider = new DataProvider([
new User("David"),
new User("Colleen"),
new User("Sharon"),
new User("Ronnie"),
new User("James")]);
// list of countries
var countries:List = new List();
addChild(countries);
countries.move(550,150); // adjut position as desired
countries.dataProvider = new DataProvider([
{label:"a"},
{label:"b"},
{label:"c"},
{label:"d"},
{label:"e"},
{label:"f"}]);
// events
users.addEventLsitener(Event.CHANGE, onUserSelected);
function onUserSelected(e:Event):void
{
countries.selectedItems = users.selectedItem.countries;
}
countries.addEventLsitener(Event.CHANGE, onCountrySelected);
function onCountrySelected(e:Event):void
{
users.selectedItem.countries = countries.selectedItems;
}
据我所知,这似乎是可行的,除了程序启动时已经提供了名称这一事实。我想要的是,用户在程序运行时自己添加名称
您可以使用DataProvider
类提供的方法添加新项,例如addItem()
。只需添加新的User
对象。我想你需要解释/向我们展示PersonList
是什么,什么是dataProvider
是什么,什么是reise
你能重新表述一下你的问题吗?我真的很难分析这句话:“问题是,当函数运行时,每个应该被推到数组中然后被推到不同项中的新值都会应用到列表中的所有项。我如何使每个项的值分开?”发生的情况是,数组array
将成为personListe.dataProvider.getItemAt(i).reise
应用于列表中的每个项目。我希望每次函数运行时.reise只应用于所选的项,而不是所有项them@Jezzamon看我的edits@Brian我不知道你是否得到通知,谢谢你的详细回答!我以前从未使用过软件包,所以我对它不太了解。我已经看到这是一个推荐的实践,所以我将用软件包重新创建这个项目,并开始学习使用它们。据我所知,这似乎是可行的,除了程序启动时已经提供了名称这一事实。我想要的是,用户在程序运行时自己添加名称。如果我误解了你,我很抱歉,但正如我所说的,我对包裹不熟悉。我明天或后天会回来研究你的代码。看来你对软件包的使用让我更容易完成我想要的。过几天我会尽力理解你的回答。抱歉,如果我不清楚我的问题以及我希望我的程序做什么。@elektroluse您可以随时添加更多项目。请参阅我的编辑。
// list of users
var users:List = new List();
addChild(users);
users.move(150,150);
users.labelFunction = userLabelFunction;
function userLabelFunction(item:Object):String
{
return item.name;
}
users.dataProvider = new DataProvider([
new User("David"),
new User("Colleen"),
new User("Sharon"),
new User("Ronnie"),
new User("James")]);
// list of countries
var countries:List = new List();
addChild(countries);
countries.move(550,150); // adjut position as desired
countries.dataProvider = new DataProvider([
{label:"a"},
{label:"b"},
{label:"c"},
{label:"d"},
{label:"e"},
{label:"f"}]);
// events
users.addEventLsitener(Event.CHANGE, onUserSelected);
function onUserSelected(e:Event):void
{
countries.selectedItems = users.selectedItem.countries;
}
countries.addEventLsitener(Event.CHANGE, onCountrySelected);
function onCountrySelected(e:Event):void
{
users.selectedItem.countries = countries.selectedItems;
}