轉(zhuǎn)帖|其它|編輯:郝浩|2011-05-30 14:48:24.000|閱讀 659 次
概述:在《WPF/Silverlight的數(shù)據(jù)綁定設(shè)計(jì)的真糟糕》文中批評(píng)了WPF/SL的數(shù)據(jù)綁定機(jī)制,拿的是Flex的數(shù)據(jù)綁定與其對(duì)比。本文介紹應(yīng)用Flex的數(shù)據(jù)綁定來(lái)解決一個(gè)實(shí)際問(wèn)題——多語(yǔ)言實(shí)時(shí)切換的問(wèn)題,以說(shuō)明簡(jiǎn)潔的數(shù)據(jù)綁定機(jī)制解決問(wèn)題是多么的優(yōu)雅。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在《WPF/Silverlight的數(shù)據(jù)綁定設(shè)計(jì)的真糟糕》文中批評(píng)了WPF/SL的數(shù)據(jù)綁定機(jī)制,拿的是Flex的數(shù)據(jù)綁定與其對(duì)比。本文介紹應(yīng)用Flex的數(shù)據(jù)綁定來(lái)解決一個(gè)實(shí)際問(wèn)題——多語(yǔ)言實(shí)時(shí)切換的問(wèn)題,以說(shuō)明簡(jiǎn)潔的數(shù)據(jù)綁定機(jī)制解決問(wèn)題是多么的優(yōu)雅。
需要解決的問(wèn)題:
有一個(gè)語(yǔ)言選擇下拉菜單,用戶選擇不同的語(yǔ)言,自動(dòng)去服務(wù)器獲取語(yǔ)言資源,然后自動(dòng)更新界面上的顯示。
這個(gè)問(wèn)題看起來(lái)很復(fù)雜,傳統(tǒng)的解決辦法是在涉及到多語(yǔ)言的界面處偵聽(tīng)語(yǔ)言切換的事件,然后更新自己,這樣的做法零碎冗長(zhǎng)。使用數(shù)據(jù)綁定是個(gè)自然有效的方法。
核心類只1個(gè):
import common.RpcRequest;
public dynamic class Lang extends Object
{
[Bindable]
public static var instance:Lang = new Lang;
public function getString(key:String, defaultString:String = null):String
{
if(this.hasOwnProperty(key)==false)
{
return defaultString ? defaultString : key;
}
else
{
return this[key];
}
}
public static function loadRemote(url:String, callback:Function = null):void
{
new RpcRequest(url, null,
function(obj:Object):void
{
loadXml(new XML(obj));
if(callback != null) callback();
}
);
}
public static function loadXml(xml:XML):void
{
if(xml == null) return;
var lang:Lang = new Lang();
for each(var node: XML in xml.item)
{
lang[node.@key]=String(node.@value);
}
instance = lang;
}
}
使用loadRemote去加載資源,成功的話自動(dòng)更新綁定源instance。如果設(shè)置了回調(diào)方法,可以傳入回調(diào)方法來(lái)干其它的事情。
資源文件舉例:
<lang>
<item key="Help" value="Help Tips" />"
<item key="MoreInfo" value="More Informations" />"
<item key="FlipToFront" value="Flip to Front Cover" />"
…
</lang>
使用:
toolTip="{RunTime.fullScreen
?Lang.instance.getString('ExitFullScreen','Exit Full Screen')
:Lang.instance.getString('FullScreen','Full Screen')}"
更進(jìn)一步,可以將類名Lang簡(jiǎn)化為l,將instance簡(jiǎn)化為_(kāi),將getString簡(jiǎn)化為s。這樣代碼又可以簡(jiǎn)潔一些。
實(shí)時(shí)切換語(yǔ)言一行代碼搞定:
Lang.loadRemote(langUrl);
總結(jié):
(1)簡(jiǎn)潔嗎?簡(jiǎn)潔!
(2)需要學(xué)新東西嗎?不需要!
(3)需要配置嗎?不需要!
(4)對(duì)比是不是覺(jué)得WPF/SL的數(shù)據(jù)綁定過(guò)度設(shè)計(jì)了?是的!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:博客園