IconItemRender в Flex 4.5.1 с динамически вызываемым значком - PullRequest
0 голосов
/ 18 ноября 2011

Хорошо, простой рендеринг элементов, или я так подумал ... У меня есть некоторые данные, загруженные в список, одно из полей - project_Type. Это строка с надписью «RESIDENTIAL» или «COMMERCIAL». И исходя из этой строки, я просто хочу показать маленький дом или маленькое офисное здание в качестве значка. Итак, я скомбинировал мой itemrender следующим образом:

    <?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    labelField="dateAdded" 
                    messageField="builder_Name" 
                    iconFunction="myiconfunction"
                    iconWidth="48" iconHeight="48"
                    decorator="@Embed('assets/Right-48x48.png')" >

    <fx:Script>
        <![CDATA[

    //  iconFunction="myiconfunction"
    //  iconWidth="32" iconHeight="32" -->

            private function myiconfunction(data:Object):String{

                var type:String; 

                var projectType:String = (data != null) ? data.project_Type : "QUESTION";

                if (projectType == "RESIDENTIAL") { 
                    type = "assets/House-48x48.png";
                } 
                else if (projectType == "COMMERCIAL") { 
                    type = "assets/Commercial-48x48.png";
                } 

                else if (projectType == "QUESTION") {
                    type = "assets/Question-48x48.png";
                }

                return type;

            }  

        ]]>
    </fx:Script>

</s:IconItemRenderer>

Так что, довольно прямо там ... Но знайте пользовательский значок .... Хотя ошибок тоже нет. Что я делаю не так, ребята?

Обновление

Итак, я изменил средство визуализации элементов на следующее, но значок по-прежнему отсутствует ... Я дважды проверил данные, и RESIDENTIAL и COMMERCIAL оба передаются ...

<?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    labelField="dateAdded" 
                    messageField="builder_Name" 
                    iconFunction="myiconfunction"
                    iconWidth="48" iconHeight="48"
                    decorator="@Embed('assets/Right-48x48.png')" >

    <fx:Script>
        <![CDATA[

            [Embed(source="assets/House-48x48.png")]
            public var residentialClass:Class;

            [Embed(source="assets/Commercial-48x48.png")]
            public var commercialClass:Class;

            [Embed(source="assets/Question-48x48.png")]
            public var questionClass:Class;

            private function myiconfunction(data:Object):Object
            {

            var projectType:String = (data != null) ? data.project_Type : "QUESTION";

            if (projectType == "RESIDENTIAL") { 
                return residentialClass;
            } 
            else if (projectType == "COMMERCIAL") { 
                return commercialClass;
            } 

            return questionClass;

            }  

        ]]>
    </fx:Script>

</s:IconItemRenderer>

Но, увы, ничего ...

Ответы [ 3 ]

0 голосов
/ 30 марта 2012

Расширение класса IconItemRenderer

package {
import spark.components.IconItemRenderer;   
 public class CustomIconListItemRenderer extends IconItemRenderer
{   
[Embed(source="assets/House-48x48.png")]
public resientialClass : Class;

[Embed(source="assets/Commercial-48x48.png")]
public commercialClass : Class;

[Embed(source="assets/Question-48x48.png")]
public questionClass : Class;

public function CustomIconListItemRenderer()
    {
        super();
        iconFunction      = iconFunc;
             }
 private function iconFunc(data:Object):Object

            var type:String; 

            var projectType:String = (data != null) ? data.project_Type : "QUESTION";

            if (projectType == "RESIDENTIAL") { 
                return residentialClass;
            } 
            else if (projectType == "COMMERCIAL") { 
                return commercialClass;
            } 

                return questionClass;

        }  
}
}

Таким образом, в вашем списке вы можете назначить его как itemRenderer = "renderers.CustomIconListItemRenderer"

0 голосов
/ 16 января 2013

Эти моды обычно работают для меня.

<?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                labelField="dateAdded" 
                messageField="builder_Name" 
                iconFunction="myiconfunction"
                iconWidth="48" iconHeight="48"
                decorator="@Embed('assets/Right-48x48.png')" >

<fx:Script>
    <![CDATA[


        private function myiconfunction(data:Object):String
        {
          var s:String = data.project_Type; //capture data for case match

          switch (s.toUpperCase()) {
                 case "RESIDENTIAL":
                      return 'assets/House-48x48.png';
                      break;
                 case "COMMERCIAL":
                      return 'assets/Commercial-48x48.png';
                      break;
                 default:
                      return 'assets/Question-48x48.png';
                      break;
            }
       }

    ]]>
</fx:Script>

</s:IconItemRenderer>
0 голосов
/ 18 ноября 2011

Вы уверены, что ваш значок когда-либо вызывали?Вы уверены, что путь к иконке правильный?Вы уверены, что ресурсы значков встраиваются в ваше скомпилированное приложение?

Вместо того, чтобы возвращать путь к объекту из вашей функции, я бы, вероятно, вернул объект класса, а не строковое значение.В половине псевдо-кода, что-то вроде этого, которое будет внутри рендерера:

<fx:Script>
[Embed(source="assets/House-48x48.png")]
public resientialClass : Class;

[Embed(source="assets/Commercial-48x48.png")]
public commercialClass : Class;

[Embed(source="assets/Question-48x48.png")]
public questionClass : Class;

            private function myiconfunction(data:Object):Object

                var type:String; 

                var projectType:String = (data != null) ? data.project_Type : "QUESTION";

                if (projectType == "RESIDENTIAL") { 
                    return residentialClass;
                } 
                else if (projectType == "COMMERCIAL") { 
                    return commercialClass;
                } 

                    return questionClass;

            }  

</fx:Script>

Укажите функцию рендеринга так же, как в исходном коде.

...