`
f910230
  • 浏览: 5494 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

FLEX 国际化:刷新DataProvider中的值

阅读更多

在FLEX国际化中遇到一个问题,对于DataProvider中的值不能随着改变localeChain的值而动态改变,google了找到以下两篇文章算是解决了问题

http://stackoverflow.com/questions/354811/flex-localization-refresh-dataprovider-values

http://www.puxiao.com/?p=201

 

大体思路是在改变localeChain 值时发布自定义事件,通过监听这个事件重新刷新DataProvider中的值,但是通过普通的dispatch方法不能全局监听到这个事件,这样通过第二篇文章中的方法设置静态

<mx:ToggleButtonBar dataProvider="{dataProviderToggleB} itemClick="clickHandler(event);" selectedIndex="0"> 

 的EventDispatcher,就可以在FLEX应用中的任何地方都能监听到这个事件了。

 

---------------------------------------------------------------------------

Maybe if you make a getter bindable to a custom event for ex: "langChange"

[Bindable("langChange")] 
public function get dataProviderToggleB():ArrayCollection 
{ 
    var arr :ArrayCollection = new ArrayCollection(); 
 
    arr.addItem(resourceManager.getString('dashboard','daily')); 
    arr.addItem(resourceManager.getString('dashboard','monthly')); 
 
    return arr;  
} 

 

and in your "resourceManager.localeChain" setter you dispatch:

dispatchEvent(new Event("langChange")); 

 

and you can used like this:

 

---------------------------------------------------------------------------

自定义CustomEvent类,继承Event,并且给他增加一个dispatcher:EventDispatcher属性。
使用这个类,就可以抛出事件并附带数据。
因为使用了 static 设置为静态属性,所以其他任意地方只要注册有这个事件侦听,就能捕获到。

CustomEvent:
package
{
import flash.events.Event;
import flash.events.EventDispatcher;

public class CustomEvent extends Event
{
public static const EVENT_NAME:String=”event_name”;

public static const dispatcher:EventDispatcher=new EventDispatcher();
public var data:Object;

public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false, data:Object=null)
{
super(type, bubbles, cancelable);
this.data=data;
}
override public function clone():Event{
return new CustomEvent(type, bubbles, cancelable, data);
}
}
}

 

抛出事件时:

var custom:CustomEvent=new CustomEvent(CustomEvent.CLICK);
//custom.data is Object;//发送事件同时,可以传值(可传可不传)
CustomEvent.dispatcher.dispatchEvent(custom);

 

侦听事件时:

CustomEvent.dispatcher.addEventListener(CustomEvent.CLICK,clickHandler);

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics