AS3 分离不同项目的数组
AS3 Separating Arrays for different items
我有一个函数可以在关联数组中创建一个新值。
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);
}
}
}
发生的事情是 'array' 数组变为 'personListe.dataProvider.getItemAt(i).reise' 应用于列表中的每个项目。我想要它,以便每次运行函数时,.reise 仅适用于所选项目,而不适用于所有项目。
编辑:
我这样做了:
personListe.dataProvider.getItemAt(i).reise = new Array(array);
现在它们不一样了,但是现在列表中的每个项目都不能有多个 .reise 值...
编辑 2:dataProvider 没什么,没有它也能正常工作。 .reise 是在我最初发布的函数中创建的,它在对象 getItemAt(i)
.
中创建 .reise
personListe 是一个列表,用户可以使用输入文本字段向其中添加自己的项目。它由这个函数给出:
function regPerson(evt:MouseEvent)
{
regPersoner.push(txtRegPerson.text);
personListe.addItem({label:regPersoner});
regPersoner = new Array();
txtRegPerson.text = "";
}
编辑 3:用户可以注册名称,这些名称会变成列表中的标签。还有 3 个国家/地区的列表,西班牙、葡萄牙和英国。然后用户可以为他们 select 的人注册一个国家。那就是当我想在第一个列表中的 "name" 项目中创建 .reise 时,该列表包含他们 selected 的国家/地区。我希望每个名称都能够 select 多个国家/地区,然后将在包含其名称的项目内的元素 .reise 中创建这些国家/地区。如果我可以使用字符串,这会很容易。但后来我计划让用户输入一个国家,然后显示每个用户对该国家进行 select 访问的内容。这就是为什么需要将国家/地区存储为 "name" 项中的数组的原因..
您应该首先为您正在建模的 User
数据创建一个 class。您已经知道所有属性。
The user can register names
The user can then register a country to a person they select.
able to select multiple countries
这样的 class 可能如下所示:
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
,用 class 的对象填充它并将它用于列表 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);
这样您就不必在 class.
中添加您不想要的 label
属性
选择一个名字意味着select一个用户。与名称关联的国家/地区列表应在第二个 List
.
中显示
List
的 DataProvider
保持不变,即所有可用国家/地区的列表。
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"}]);
现在你所要做的就是把它全部连接起来。如果用户是 selected,select 他的国家在国家列表中。如果某个国家/地区已 selected,请将其添加到当前 selected 的国家/地区用户列表中。这可能看起来像这样:
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;
}
From what I understand this seems to work except for the fact that the names are already provided when the program starts. What I want is that the user adds the name themselves while the program is running.
您可以使用 DataProvider
class 提供的方法添加新项目,例如 addItem()
。只需添加新的 User
个对象。
我有一个函数可以在关联数组中创建一个新值。
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);
}
}
}
发生的事情是 'array' 数组变为 'personListe.dataProvider.getItemAt(i).reise' 应用于列表中的每个项目。我想要它,以便每次运行函数时,.reise 仅适用于所选项目,而不适用于所有项目。
编辑:
我这样做了:
personListe.dataProvider.getItemAt(i).reise = new Array(array);
现在它们不一样了,但是现在列表中的每个项目都不能有多个 .reise 值...
编辑 2:dataProvider 没什么,没有它也能正常工作。 .reise 是在我最初发布的函数中创建的,它在对象 getItemAt(i)
.
.reise
personListe 是一个列表,用户可以使用输入文本字段向其中添加自己的项目。它由这个函数给出:
function regPerson(evt:MouseEvent)
{
regPersoner.push(txtRegPerson.text);
personListe.addItem({label:regPersoner});
regPersoner = new Array();
txtRegPerson.text = "";
}
编辑 3:用户可以注册名称,这些名称会变成列表中的标签。还有 3 个国家/地区的列表,西班牙、葡萄牙和英国。然后用户可以为他们 select 的人注册一个国家。那就是当我想在第一个列表中的 "name" 项目中创建 .reise 时,该列表包含他们 selected 的国家/地区。我希望每个名称都能够 select 多个国家/地区,然后将在包含其名称的项目内的元素 .reise 中创建这些国家/地区。如果我可以使用字符串,这会很容易。但后来我计划让用户输入一个国家,然后显示每个用户对该国家进行 select 访问的内容。这就是为什么需要将国家/地区存储为 "name" 项中的数组的原因..
您应该首先为您正在建模的 User
数据创建一个 class。您已经知道所有属性。
The user can register names
The user can then register a country to a person they select.
able to select multiple countries
这样的 class 可能如下所示:
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
,用 class 的对象填充它并将它用于列表 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);
这样您就不必在 class.
中添加您不想要的label
属性
选择一个名字意味着select一个用户。与名称关联的国家/地区列表应在第二个 List
.
List
的 DataProvider
保持不变,即所有可用国家/地区的列表。
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"}]);
现在你所要做的就是把它全部连接起来。如果用户是 selected,select 他的国家在国家列表中。如果某个国家/地区已 selected,请将其添加到当前 selected 的国家/地区用户列表中。这可能看起来像这样:
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;
}
From what I understand this seems to work except for the fact that the names are already provided when the program starts. What I want is that the user adds the name themselves while the program is running.
您可以使用 DataProvider
class 提供的方法添加新项目,例如 addItem()
。只需添加新的 User
个对象。