我试图在arraycollection中添加一个项目,该项目使用addItemAt()进行排序和过滤。但是addItemAt()并没有向指定的索引中添加条目。有谁知道解决上述问题的方法吗?
我正在尝试添加一个项目在数组集合这是排序和过滤后的
如果集合已排序,则在向其添加新项时将自动刷新过滤器。所以,你添加项目的索引可能不是项目最终的索引。这完全取决于排序算法。
您可以删除排序以将新项锁定在指定的索引上。在我的脑海里,这样做:
arrayCollection.sort = null;
arrayCollection.refresh();
我很确定同样的概念也适用于过滤。如果将筛选器应用于集合,则新项目需要匹配筛选条件,否则它将不会显示在集合中,直到删除筛选器。
我有一个类似的问题,只有在Flex 3和排序的ArrayCollection。如果您搜索,您会发现addItemAt不能与排序的ArrayCollection一起工作(并且绝对不能过滤?不知道)。项目将根据排序标准进行添加。
然而,我需要一个排序的ArrayCollection (alpha),顶部有一个"Select All"选项,所以我是这样做的:
数组可以很容易地排序(array.sort),所以我首先创建了一个array。然后循环ArrayCollection,并将希望排序的项添加到数组中。然后对新数组进行排序。
新排序的数组被循环,在这个循环中,ArrayCollection被再次循环。如果在排序项上找到匹配项,我将该对象添加到新的ArrayCollection中,但也为添加的对象创建了一个名为"sortOrder"的新属性,该属性设置为循环计数。
下一步,创建"全选"对象,并将其sortOrder设置为-1。
最后,在ArrayCollection的sortOrder字段上创建了数字排序,瞧,它成功了。
也许有人有一个更优雅的解决方案,但我很着急,它起作用了。
addItemAt() is adding item to the specified index.
例如*:*
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var myArray:ArrayCollection= new ArrayCollection([
{student:'one',subject:'2'},
{student:'two',subject:'4'},
{student:'three',subject:'5'},
{student:'four',subject:'6'}
]);
protected function addArrayCollectioninRuntime(event:MouseEvent):void
{
myArray.addItemAt({student:nameTxtinput.text,subject:subjectTxtinput.text},3);
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:Form>
<s:FormItem label="Student Name :">
<s:TextInput id="nameTxtinput"/>
</s:FormItem>
<s:FormItem label="Student Subject :">
<s:TextInput id="subjectTxtinput" />
</s:FormItem>
<s:Button label="Submit" click="addArrayCollectioninRuntime(event)"/>
</s:Form>
<mx:DataGrid dataProvider="{myArray}" id="dGrid" >
<mx:columns>
<mx:DataGridColumn dataField="student" id="stud"/>
<mx:DataGridColumn dataField="subject" id="sub"/>
</mx:columns>
</mx:DataGrid>