我有一个在关联数组中创建新值的函数。
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);
}
}
}
发生的事情是&#39;阵列&#39;变成&#39; personListe.dataProvider.getItemAt(i).reise&#39;适用于列表中的每个项目。我想要它,以便每次运行该函数时,.reise仅适用于所选项目而不是所有项目。
编辑:
我这样做了:
personListe.dataProvider.getItemAt(i).reise = new Array(array);
现在它们不一样但现在列表中的每个项目都不能有多个.reise值......
编辑2:没有它,dataProvider没有任何效果。 .reise是在我最初发布的函数中创建的,它在对象.reise
中创建getItemAt(i)
。
personListe是用户通过使用输入文本字段添加自己的项目的列表。它由这个函数给出:
function regPerson(evt:MouseEvent)
{
regPersoner.push(txtRegPerson.text);
personListe.addItem({label:regPersoner});
regPersoner = new Array();
txtRegPerson.text = "";
}
编辑3:用户可以注册转到列表中标签的名称。还列出了3个国家,西班牙,葡萄牙和英国。然后,用户可以将国家注册到他们选择的人。那就是当我想在&#34;名称&#34;内创建.reise时第一个列表中包含所选国家/地区的项目。我希望每个名称都能够选择多个国家,然后将在包含其名称的项目内的元素.reise中创建。如果我可以使用字符串,这将很容易。但是后来我计划让用户输入一个国家/地区,然后显示每个用户选择该国家/地区的内容。这就是为什么这些国家需要作为数组存储在&#34; name&#34;项..
答案 0 :(得分:2)
您应首先为正在建模的User
数据创建一个类。你已经知道了所有的属性。
用户可以注册名称
然后,用户可以将国家注册到他们选择的人。
能够选择多个国家/地区
这样的课程看起来像这样:
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;
}
}
}
现在创建一个DataProvider
,用该类的对象填充它并将其用于列表as described here:
import fl.controls.List;
import fl.data.DataProvider;
var users:List = new List();
users.dataProvider = new DataProvider([
new User("David"),
new User("Colleen"),
new User("Sharon"),
new User("Ronnie"),
new User("James")]);
addChild(users);
users.move(150, 150);
要从User
对象获取标签,请定义labelFunction
import fl.controls.List;
import fl.data.DataProvider;
var users:List = new List();
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")]);
addChild(users);
users.move(150,150);
这样您就不必在班级中添加您不想要的label
属性。
选择名称意味着选择用户。与该名称相关联的国家/地区列表应显示在第二个List
。
DataProvider
的{{1}}保持不变,列出了所有可用的国家/地区。
List
现在你所要做的就是把它连接起来。如果选择了用户,请在国家/地区列表中选择他的国家/地区。如果选择了某个国家/地区,请将其添加到当前所选用户的国家/地区列表中这可能看起来像这样:
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"}]);
完整代码可能如下所示。我没有测试过这个,但你明白了。
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()
个对象。