سؤال

أواجه مشكلة في قيم ملزمة في مكونات ActionScript الخاصة بي. أريد أساسا تعيين قيمة متغير AA في مكوناتي إلى قيمة في النموذج، والحصول على متغير المكون تلقائيا عند تحديث القيمة النموذجية. أعتقد أنني لا أفهم تماما كيف يعمل تجليد البيانات في Flex - هذه ليست مشكلة عند استخدام مكونات MXML، ولكن عند استخدام فئات ActionScript، لا يعمل الربط.

هذا هو الرمز الذي أستخدمه، حيث لا تكون القيم ملزمة:

package
{
    public class Type1Lists extends TwoLists
    {
        public function Type1Lists()
        {
            super();

            super.availableEntities = super.composite.availableType1Entities;

            super.selectedEntities = super.composite.selectedType1Entities;
        }
    }
}

package
{
    public class Type2Lists extends TwoLists
    {
        public function Type2Lists()
        {
            super();

            super.availableEntities = super.composite.availableType2Entities;

            super.selectedEntities = super.composite.selectedType2Entities;
        }
    }
}

/* TwoLists.mxml */
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            public var __model:ModelLocator = ModelLocator.getInstance();

            public var composite:Composite = 
                __model.selectedComposite;

            [Bindable]
            public var availableEntities:ArrayCollection;

            [Bindable]
            public var selectedEntities:ArrayCollection;
        ]]>
    </mx:Script>

    <mx:List id="availableEntitiesList" dataProvider="{availableEntities}" />

    <mx:List id="selectedEntitiesList" dataProvider="{selectedEntities}" />
</mx:HBox>
هل كانت مفيدة؟

المحلول 3

لإصلاح هذا، قمت ببساطة بتحويل الفئات إلى مكونات MXML، وأضاف متغير خاص لمعين الخاص بي.

/* Type1Lists.mxml */
<?xml version="1.0" encoding="utf-8"?>
<TwoLists xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="*" 
    availableEntities="{__model.selectedComposite.availableType1Entities}" 
    selectedEntities="{__model.selectedComposite.selectedType1Entities}">
    <mx:Script>
        <![CDATA[
            import model.ModelLocator;

            [Bindable]
            private var __model:ModelLocator = ModelLocator.getInstance();
    </mx:Script>
</TwoLists>

/* Type2Lists.mxml */
<?xml version="1.0" encoding="utf-8"?>
<TwoLists xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="*" 
    availableEntities="{__model.selectedComposite.availableType2Entities}" 
    selectedEntities="{__model.selectedComposite.selectedType2Entities}">
    <mx:Script>
        <![CDATA[
            import model.ModelLocator;

            [Bindable]
            private var __model:ModelLocator = ModelLocator.getInstance();
    </mx:Script>
</TwoLists>

نصائح أخرى

لاستخدام ربط الرموز، يجب عليك استخدام MX.Binding.utils. *

إلقاء نظرة وطرق Bindingutils.BindProperty و Bindsetter.

أيضا، كن حذرا مع قاعدة البيانات اليدوية، يمكن أن يقودك إلى تسرب الذاكرة. لتجنبها، احفظ التغيير التغيير الذي تم إرجاعه بواسطة BindProperty و Bindsetter وسيتم استدعاء الأسلوب غير المراقب، عندما لا يكون أكثر استخداما (أي بطريقة DipoSe أو Destructor)

تحتاج إلى إضافة علامة [BIDAL) إما إلى الفصل نفسه (مما يجعل جميع الخصائص قابلة للتغذية) أو الخصائص التي تريد أن تكون [قابلة للتغذية]. بمناسبة الخصائص أو الكائنات كما [قابل للتغلبية] في MXML الخاص بك ليست كافية.

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