سؤال

لدي MXML مع نموذج، وداخله، TrensInputs. أنا أكره وجود أي جزء من التعليمات البرمجية داخل ملف MXML (لقد جئت من تكوين جافا سكريبت) لذلك يمكنني استخدام

mx:Script source="external.as"

علامة لتضمين أي رمز يستخدم في أي ملف MXML. المشكلة هي أنه إذا كان لدي هذا الرمز على external.as ملف:

private function populateFromForm():void{
   var vo:ValidObject= new ValidObject();
   vo.market = marketInput.text;
   vo.segment = segmentInput.text;
   vo.priceLow = priceLowInput.text;
   vo.priceHigh = priceHighInput.text;
}

حيث الأسواق، المنقصلةإدخال، PricelowFInput والمستفعة هي TextInputs محددة في ملف MXML. عندما أحاول أن أشكك أحصل على 1120: الوصول إلى خاصية غير محددة XXXXX

لقد حاولت إضافة هذه الخطوط قبل الوظيفة:

public var marketInput:TextInput;
public var segmentInput:TextInput;
public var priceLowInput:TextInput;
public var priceHighInput:TextInput;

ولكن بدلا من ذلك أحصل على 1151: يوجد صراع مع تعريف XXXX في مساحة الاسم الداخلية مما يجعل الشعور المثالي.

هل هناك طريقة للقيام بذلك دون الحاجة إلى اجتياز جميع مراجع الإدخال إلى الوظيفة كمعلمات منه؟

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

المحلول

القيام ب "رمز وراء" مؤلمة في المرن. لا يوجد مفهوم للفصول الجزئية أو مرونة الميراث النموذجي كما في جافا سكريبت. جوجل ل "الكود-وراء فليكس" للعديد من الموارد.

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

نصائح أخرى

تحتاج إلى إنشاء مرجع إلى مثيل حاوية الوالدين "TextInputs"، ثم استخدم هذا المرجع إلى استنساج TextInputs وخصائصها. أعتقد أننا نحتاج إلى بعض التوضيح على هيكل الملف الخاص بك. كيف تخلق مثيل الحاوية الأصل؟ أفكر في أن هذا ما عليك القيام به:

myform.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:TextInput id="marketInput" />
    <mx:TextInput id="segmentInput" />
    <mx:TextInput id="priceLowInput" />
    <mx:TextInput id="priceHighInput" />
</mx:VBox>

savevocontainer.as:

package
{
    public class SaveVoContainer extends Container
    {
        private var myForm:MyForm = new MyForm();

        public function SaveVOContainer
        {
            this.addChild(myForm);
        }

        private function populateFromForm():void{
           var vo:ValidObject= new ValidObject();
           vo.market = myForm.marketInput.text;
           vo.segment = myForm.segmentInput.text;
           vo.priceLow = myForm.priceLowInput.text;
           vo.priceHigh = myForm.priceHighInput.text;
        }
    }
}

الطريقة الكنسية للقيام بمثابة الكود في المرن هي عن طريق الوراثة. إليك تفسير جيد من المستندات: http://learn.adobe.com/wiki/display/flex/code+behind.. وبعد شيء صغير:

  1. أعلن فئة ActionScript لاستخدامها كصفك الأساسي.
  2. اضبط الفئة الأساسية كحاوية الجذر في ملف MXML الخاص بك.
  3. بالنسبة لأي عناصر تحكم معلنة في ملف MXML الخاص بك، يجب عليك إعادة تشغيلها كأعضاء عموميين في الفئة الأساسية باستخدام نفس الاسم بالضبط (تماما كما تفعل تماما كما تفعل تماما كتلة البرنامج النصي مع علامة المصدر، فقط يعمل :-)

لذلك، ملف أكشاك:

package mypackage
{
    import mx.controls.TextInput;

    public class myClass extends WindowedApplication
    {
        public var marketInput:TextInput;

        private function populateFromForm():void{
            /* As above */
        }
    }
}

وملف MXML المقابل:

<?xml version="1.0" encoding="utf-8"?>
<custom:myClass xmlns:custom="mypackage.*"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <mx:TextInput id="marketInput"/>
</custom:myClass>

ET Cetera لعناصر تحكم TextInPut الأخرى. والآن يجب أن تعمل وظيفة PopultFromFormFormForm.

إنه نوع من البشعة التي تضطر إلى إعادة ريديكا نفس الكيانات مرتين، لكنها ليست حقيبة الأذى في وقت سابق جعل المستفتى في وقت سابق جعله (على الرغم من أنه قد تغير هذا في المرن 4 لجعله أقل إيلاما مما كان عليه).

  • استيراد هذا في .AS:

    import mx.core.Application;

  • في .as استخدام هذا:

    mx.core.Application.application.component.property = value; mx.core.Application.application.myText.text = 'test';

هل لديك علامة نصية في ملف MXML الخاص بك يشير إلى ملف ActionScript الخاص بك؟


<mx:Script source='includes/foo.as' />

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