我動態創建我的應用程序的運行時窗體。我的表單項的內容(可以稱之爲MyFormItemContent)看起來像這樣(簡化):動態添加FormItem不顯示錯誤文本
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
width="100%" borderAlpha="0.0">
<fx:Declarations>
<utils:DataItemValidator dataItem="{referenceToDataItem}"
source="{this}"/>
</fx:Declarations>
<s:HGroup width="100%">
<s:TextInput width="100%" text="@{bindingToText}"/>
<s:CheckBox width="14" selected="{refToBoolean}"/>
</s:HGroup>
</s:BorderContainer>
,爲我們使用驗證程序的代碼。它可以很好地運行應用程序的其他部分,並且調試顯示消息存在但未顯示。
/**
* This class effectively does *not* validate the given 'value', but just returns
* his 'dataItem's attached messages.
*/
public class DataItemValidator extends Validator {
private var _dataItem:StatefulDataItem;
public function get dataItem():StatefulDataItem {
return _dataItem;
}
public function set dataItem(dataItem:StatefulDataItem):void {
_dataItem = dataItem;
ChangeWatcher.watch(_dataItem, "messages", function():void {
validate();
}, false);
validate();
}
override protected function doValidation(value:Object):Array {
if (!isInitialized()) return [];
// Clear results Array.
var results:Array = [];
// If dataItem has error indicator append all messages to result array.
if (dataItem && dataItem.messages) {
for each (var message:ResultMessage in dataItem.messages) {
results.push(new ValidationResult(message.isErroneous(), null, "", message.text));
}
}
return results;
}
public function isErroneous():Boolean {
if (!dataItem) return false;
return dataItem.isErroneous();
}
private function isInitialized():Boolean {
return (dataItem != null);
}
}
聲明形式的代碼如下所示:
<s:Form id="myForm" width="100%" height="100%">
<s:layout>
<s:FormLayout gap="-7" paddingBottom="2" paddingLeft="2" paddingRight="2"
paddingTop="2"/>
</s:layout>
</s:Form>
最後,該項目被添加到形式是這樣的:
var formItem:FormItem = new FormItem();
formItem.label = "some text";
formItem.addElement(new MyFormItemContent());
myForm.addElement(formItem);
如果MyValidator的驗證具有按照預期錯誤在BorderContainer周圍出現紅框。但不幸的是,應該對形式項目的錯誤文本不適用。我想這是一個佈局問題,因爲我在將表單項內容添加到表單之前定義了驗證器。我已經調試過這個並閱讀了很多文檔。
我認爲這將有助於瞭解如何將FormItem添加到窗體中,如果您在mxml中聲明該窗體,但是我無法找到該信息。
你的驗證器類在哪裏? – Triode 2012-03-29 12:32:05
我認爲發佈驗證器會很多。如果你想驗證驗證器是否工作:它確實!我們在其他用戶界面組件中使用同一個,如果我調試,我可以看到存在一條消息。無論如何,如果你仍然想看到它,我可以發佈它。 – 2012-03-29 12:38:48
我希望看到bcoz正常驗證程序的工作正常 – Triode 2012-03-29 14:01:33