分享

在Flex中使用Delegate pattern来设计更好的对话框

 ShangShujie 2007-10-16
在Flex中使用Delegate pattern来设计更好的对话框 作者:未知  【字体:  】【颜色: 绿   

在Flex中使用Delegate pattern来设计更好的对话框
不同于C#和Java, Flex 并没有定义一个明确的Dialog模式,我们常常使用popUp作为对话框, 可是每个人的实现方法各不相同,因此在这里我想介绍一种比较灵活的设计供大家参考.

 

Delegate是Flex中很有用的一个utility类,它起到了封装一个callback同时保留其this指针的作用。它的用法很类似于C#中的Delegate只不过由于javascript是weak type,所以实现上更容易些。

我们可以在大多数需要callback的地方使用Delegate,而不用担心this的问题。关于这个class的用法DevNet上有详细的介绍,我就不多罗嗦了。这里主要用Delegate来设计一个比较灵活的Dialog。

在 应用设计中,我们应该注意到每个popup dialog应该尽可能地被重复利用,打个比方一个输入用户信息的dialog, 即可能被建立用户的函数使用也可能被修改用户的函数使用。因此这个 dialog class不应该依赖于它的parent.其作用就是接受一个user object让用户编辑并且在用户按了ok后调用指定的callback并传入被修改的user object.

以 下范例演示了如何利用Delegate来传递用户数据, 当用户调用createUser()的时候,Delegate封装了onCreateUser()这个callback函数,而当modifyUser ()的时候,Delegate则封装了onModifyUser()这个callback. 整个过程中User Dialog并不需要知道究竟是谁在呼叫它.

 

//--------------------------
// Application.mxml
//-------------------------
function beginPopUp(popUpClass, popUpSize, initObj)
{
var w = popUpSize.w;
var h = popUpSize.h;
initObj.x = (this.width-w)/2;
initObj.y = (this.height-h)/2;

var popUp = popupWindow(popUpClass, initObj);
popUp.setSize(w,h);
return popUp;
}

function createUser()
{
beginPopUp( UserDialog, {w:600, h:450}, {delegate:Delegate.create(this, onCreateUser), title:"Create user", user:new User()});
}

function onCreateUser(newUser:User)
{
trace("Created a new user");
}

function modifyUser(user:User)
{
beginPopUp( UserDialog, {w:600, h:450}, {delegate:Delegate.create(this, onCreateUser), title:"Modify user", user:user});
}

function onModifyUser(modifiedUser:User)
{
trace("Modified a user");
}


//-----------------------
// UserDialog.mxml
//----------------------
function doClose(isOk)
{
if (isOk)
{
delegate(dataObj);
}
this.deletePopUp();
}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多