【问题标题】:Mobile Flex 4.5 FormItem errorTip not showingMobile Flex 4.5 FormItem 错误提示未显示
【发布时间】:2012-11-14 16:11:24
【问题描述】:

我目前正在尝试使用 numbervalidator 来验证我的几个使用十进制值的字段。我希望它显示 mx 示例的显示方式,例如http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/validators/NumberValidator.html#includeExamplesSummary

即使我已启用它(请阅读下文),错误提示也不会出现。而且它确实显示的错误消息被放置在屏幕顶部而不是在formitem中。

<s:NumberValidator id="nv1" allowNegative="false" source="{field1}" property="text" fractionalDigits="3"  />
<s:NumberValidator id="nv2" allowNegative="false" source="{field2}" property="text" fractionalDigits="3"  />

我阅读了一个建议来覆盖 formitem 皮肤并将 showErrorTip 设置为 true(在 contentGroup 上),但这没有任何影响。我还删除了 errorTextDisplay 以尝试阻止出现的其他错误消息,但这也没有影响。

如果我能让现有的错误消息出现在 formItem(下方)中,我会很高兴的。我在下面包含了我的视图的基本结构:

<s:Scroller width="100%" height="100%">
    <s:Group>
        <s:Form id="myForm" width="100%">
            <s:layout>
                <s:FormLayout gap="0"/>
            </s:layout>
            <s:HGroup width="100%">
                <s:FormItem label="Field1" width="50%">
                    <s:TextInput id="field1" width="100%" text="{data.field1}" restrict="0-9." />
                </s:FormItem>
                <s:FormItem label="Field2" width="50%">
                    <s:TextInput id="field2" width="100%" text="{data.field2}" restrict="0-9." />
                </s:FormItem>
            </s:HGroup>
        </s:Form>
    </s:Group>
</s:Scroller>

这是一个很长的表单(我省略了其他字段),这就是我使用滚动条并以两列布局显示输入的原因。

【问题讨论】:

    标签: forms apache-flex flex4.5 flex-mobile


    【解决方案1】:

    试试这个,这应该可以显示错误消息,你需要向验证器添加一个触发器并说明它必须触发什么事件。

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">
    
        <fx:Declarations>
            <s:NumberValidator id="nv1" allowNegative="false" source="{field1}" property="text" fractionalDigits="3"  
                               trigger="{validate}" triggerEvent="click" requiredFieldError="No use"/>
            <s:NumberValidator id="nv2" allowNegative="false" source="{field2}" property="text" fractionalDigits="3" 
                               trigger="{validate}" triggerEvent="click" requiredFieldError="No use"/>
        </fx:Declarations>
    
    
        <s:Scroller width="100%" height="100%">
            <s:Group>
                <s:Form id="myForm" width="100%">
                    <s:layout>
                        <s:FormLayout gap="0"/>
                    </s:layout>
                    <s:VGroup width="100%">
                        <s:FormItem label="Field1" width="50%">
                            <s:TextInput id="field1" width="100%" text="11" restrict="0-9." />
                        </s:FormItem>
                        <s:FormItem label="Field2" width="50%">
                            <s:TextInput id="field2" width="100%" text="22" restrict="0-9." />
                        </s:FormItem>
                    </s:VGroup>
                    <s:Button id="validate" label="Validate"/>
                </s:Form>
            </s:Group>
        </s:Scroller>
    </s:Application>
    

    【讨论】:

    • 不,恐怕这仍然无法正常工作。错误显示(它总是完成但位置错误)。就像它忽略了文本字段的位置,只是将其粘贴在所有元素之外。图标出现在正确的位置,但错误消息出现在顶部(脱离上下文)。
    • 我继续调查,发现我做错了什么。 StackedForm 皮肤将错误移动到主表单对象而不是单个项目中。你的回答帮助我找到了正确的方向,所以我给了它一个赞成票,并在下面发布了完整的解决方案。再次感谢!
    【解决方案2】:

    您使用图标出现不同类型错误的原因是因为您使用了&lt;s:Form&gt;&lt;s:FormItem&gt;,将其更改为&lt;mx:Form&gt;&lt;mx:FormItem&gt; 时,您将得到旧类型的错误工具提示上突出显示的框和错误。试试下面的示例。

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">
    
        <fx:Declarations>
            <s:NumberValidator id="nv1" allowNegative="false" source="{field1}" property="text" fractionalDigits="3"  />
            <s:NumberValidator id="nv2" allowNegative="false" source="{field2}" property="text" fractionalDigits="3"  />
        </fx:Declarations>
    
    
        <s:Scroller width="100%" height="100%">
            <s:Group>
                <mx:Form id="myForm" width="100%">
                    <s:HGroup width="100%">
                        <mx:FormItem label="Field1" width="50%">
                            <s:TextInput id="field1" width="100%" text="1" restrict="0-9." />
                        </mx:FormItem>
                        <mx:FormItem label="Field2" width="50%">
                            <s:TextInput id="field2" width="100%" text="2" restrict="0-9." />
                        </mx:FormItem>
                    </s:HGroup>
                </mx:Form>
            </s:Group>
        </s:Scroller>
    </s:Application>
    

    【讨论】:

    • 它不允许我使用这些元素。它给出了标准的“无法解析组件实现”错误。我在顶部包含了命名空间行。我可以使用其他 mx 元素,但表单中没有出现在列表中。我猜这可能是因为它是一个移动应用程序。
    • 是的,我试过了。他们已将
      作为 Flex 移动项目的默认设置,因为在移动设备中显示鼠标悬停错误是没有意义的。默认情况下,用户界面标准最好在文本输入旁边显示错误,并带有移动应用程序的图标。您需要做的就是尽量减少文本输入的长度并为错误消息留出空间。
    【解决方案3】:

    我设法找到了我自己的问题的解决方案,部分原因是我忘记提及原来是问题的重要部分。表单皮肤的默认布局非常糟糕,所以我分别切换到 StackedFormSkin 和 StackedFormItemSkin。

    但是,Stacked 皮肤将 errorTextDisplay 从 formitem 移动到 form 皮肤。我最终需要做的是创建自己的皮肤(从各自堆叠的皮肤中 c+p'd)。

    在我的表单皮肤中,我只是从 FormSkin 中删除了 errorTextDisplay 元素,并从原始 FormItemSkin 中复制了 errorTextDisplay,并进行了一些更改(如下所示)以使其显示在文本输入下方。

    <s:RichText id="errorTextDisplay" includeIn="errorStates"
                fontStyle="italic" fontWeight="normal" color="0xFE0000"
                left="contentCol:0" right="helpCol:10"
                bottom="row3:10" baseline="row3:0" 
                maxDisplayedLines="-1"/>
    

    您需要将 row3 添加为额外的 ConstraintRow。

    基本上,上述更改将获得 StackedForm 外观的优势,但意味着您的错误消息仍会出现在导致错误的输入旁边。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多