使用View-Model模式绑定Flex数据

时间:2011-07-15 20:55:10

标签: flex data-binding viewmodel presentation-model

我正试图在Flex应用程序中使用View / Model / View-Model或Presentation Model模式,因为它确实感觉就像是“正确”的做事方式。我有一个关于如何使用Flex数据绑定的问题。

假设我有一个Project模型类,其中包含一个可绑定的名称字段。我想制作一份报告来显示有关该项目的信息。报告的标题应为 [项目名称] 摘要。我想创建一个View-Model类来为报告提供支持。此SummaryViewModel课程将有一个title字段来提供报告标题。

在我的报告mxml中,我将标题标签绑定到summaryModel.title,但是title需要以某种方式绑定到projectModel.name,所以如果在程序的另一部分更改了名称,报告标题更新。

在Flex中实现这种“两级”数据绑定的正确方法是什么?我应该以不同的方式做事吗?

2 个答案:

答案 0 :(得分:1)

假设您有这样的模型:

[Bindable]
public class Project {
    public var name:String;
}

你有自己的演示模型:

[Bindable]
public class SummaryPresentationModel
{
    private var projectModel:Project = new Project();

    public var title:String;
}

在构造函数中,您可以将模型的setter数据绑定到设置标题的函数:

    public function SummaryPresentationModel() {
        BindingUtils.bindSetter(modelNameChanged, projectModel, "name");
    }

然后设置title

的值
    private function modelNameChanged(newValue:String):void {
        title = "[" + projectModel.name + "] Summary";
    }

然后您可以自由绑定到summaryPM.title,当projectModel.name更改时,所有内容都会链接到用户界面。

你可以变得更复杂并在title上使用“getter”函数(而不是像我在这里那样设置它),但是你需要传播更改通知。我并不是非常难以做到,但我发现这种方法更容易理解。

希望这有帮助!

答案 1 :(得分:0)

与任何其他绑定没有什么不同,它们都会被更新(两者都是您放置标题和摘要模型的地方)。

如果您发布定义值的方式,我可以帮助您使用语法,但这不是一个困难的绑定操作。事情稍微复杂一点就是双向约束。