OpenUI5:JS视图与XML视图

时间:2015-04-13 08:04:21

标签: javascript xml model-view-controller sapui5

我们目前正在新项目的背景下评估SAP的OpenUI5。

虽然大多数示例和教程倾向于使用XML构建视图,但出于个人喜好,我选择Javascript来完成任务。但是,我还没有在OpenUI5中找到足够长的时间来确定这两种方法的任何特定优势。

使用JS有什么缺点吗?或者甚至优势?

非常感谢!

更新

我同意SDD64的回答。在并行使用这两种方法一段时间之后,我可以在列表中添加以下优缺点:

XML优势:

  • 他们帮助坚持mvc,因为你不太愿意将控制器逻辑引入视图
  • 可能允许使用所见即所得的编辑
  • 非常隐含,因此更容易学习

XML缺点:

  • 糟糕的可读性
  • 有时修改现有视图比较棘手
  • 非常隐含,如果你关心幕后发生的事情会很糟糕

3 个答案:

答案 0 :(得分:3)

我也是基于JS的观点的粉丝。可能(dis)优点在我眼中:

JS的优势

  • 面向对象创建视图。您可以创建对象,排列它们,调用它们并使用您想要的任何JavaScript函数(例如循环)
  • 根据我的口味,基于SAPUI5 XML的视图似乎有点过于含蓄。在JS中,我可以清楚地读出我正在做的编码。
  • 页面可以是动态的
  • 您一直都在使用JavaScript

JS的缺点

  • XML倾向于在视图和逻辑之间进行严格的分离。例如,您被迫使用外部格式化程序。我认为XML视图可能更清晰。
  • SAP使用XML视图发布所有Fiori应用程序。所以,你有点被迫掌握如何阅读基于XML的视图的知识。
  • 您可能在XML
  • 中拥有更少的代码行

**更新2015-06-18 **

使用XML视图中的当前OpenUI5 1.28支持条件以及最近预览的1.30支持binding for dynamic loading of XML fragments,我觉得有必要更新我的答案。

借助这些新功能,XML视图获得了“健康”的灵活性。与基于JS的观点相比,对我而言,使它们更具吸引力。

答案 1 :(得分:0)

这一切都在开发者的眼中。有些开发人员更愿意编写html5之类的(xml)视图,其他人则更喜欢用js视图控制感觉。 xml视图的一个小缺点是将它们转换为js代码的额外步骤。它们应该有点(可忽略)慢。

答案 2 :(得分:0)

可以使用XML-Views动态构建您的页面:

<强>控制器

sap.ui.controller("my.own.controller", {
  onInit: function () {
    var jsonData = {
        simpsons: [
            {name: "Marge", gender: "female"},
            {name: "Homer", gender: "male"},
            {name: "Bart", gender: "male"},
            {name: "Lisa", gender: "female"},
            {name: "Maggi", gender: "female"},
            {name: "Snowball1", gender: "female"},
            {name: "Ruprecht", gender: "male"}
        ]
    };
    var oModel = new JSONModel(suggJSON);
    this.setModel(oModel, "myJsonModel");
  },
});

查看

 <core:View 
    xmlns:core="sap.ui.core" 
    xmlns:m="sap.m"
    xmlns="sap.ui.commons" 
    xmlns:html="http://www.w3.org/1999/xhtml"
    > 
      Content of Model:
      <m:VBox items="{myJsonModel>/simpsons}">
        <Button text="{myJsonModel>name} visible="{= ${myJsonModel>gender} === 'male'}"/>
        <Text text="{myJsonModel>name} visible="{= ${myJsonModel>gender} === 'female'}"/>
      </m:VBox>
  </core:View>