سؤال

أواجه بعض المشكلات عند استدعاء GetItemIndex على ArrAyCollection مع مجموعة FilterFunction.

أنا أفعل شيئا مثل myAC.removeItemAt(myAC.getItemIndex(myObject)), ، والتي تعمل بشكل جيد عند عدم تطبيق التصفية. بمجرد تطبيق الترشيح، يبدو أن GetItemIndex للعودة -1 في كل حالة.

هل سبق لأحدهم مصادفة هذا من قبل؟ ما هي أفضل طريقة لإزالة عنصر نموذج ArrayCollection مرشح؟

شكرًا جزيلاً.

إيفان

هل كانت مفيدة؟

المحلول

ما هو بالضبط تصفية المرشح الخاص بك؟ إذا قمت بتصفية كل شيء، يجب أن يعود GetItEmindex -1.

هل تأمل في إزالة العناصر التي لا تزال مرئية عند تطبيق فلترك؟ إذا كنت لا تزال ترغب في إزالة عنصر يتم ترشيحه، فيمكنك تعطيل المرشح مؤقتا:

var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();

// remove item

ac.filterFunction = filter;
ac.refresh();

نصائح أخرى

أعتقد أنك ستجد هناك كائن مصدر داخل ArrAyCollection. ما تراه هو عرض للبيانات الأساسية مع تطبيق فرز أو مرشح. تريد حقا حذف من كائن المصدر الأساسي.

في أي وقت تعاملت مع إضافة وإزالة العناصر من ArrAycollections في Flex، لقد احتفظت دائما بنسخة من ArrayCollection الأصلي. أي إضافة أو إزالة العناصر تحدث هذه النسخة الأصلية.

بمجرد إجراء التغييرات إلى الأصل، أتحرك تلك الأمامية إلى القائمة المصفاة.

أخرجه من المصدر مباشرة

arrayCollection.source.splice(i, 1)

نعم، لذلك لقد اكتشفت أنني كنت أغير خاصية الكائن - إلى واحد من شأنه أن يتم تصفيته - قبل محاولة إزالته. بالطبع أود الحصول على -1 في هذه الحالة. غلطتي.

انتهى الأمر في الذهاب مع اقتراحك، Stiggler. يبدو أنه يعمل بشكل جيد، على الرغم من أنه يجب أن يكون هناك طريقة أقل اختراقا للتعامل مع هذا النوع من الأشياء. ربما تعد معلمة يمكنك تمريرها إلى RemoveItemat من شأنها أن تتيح لك الوصول إلى المجموعة غير المنوية.

على أي حال، شكرا لك لكل منكما على ردودكم. مقدر جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top