SAPUI5 XML视图和控制器

问题描述:

当我看Developer Guide的SAPUI5网站上,这是他们如何声明一个XML视图:SAPUI5 XML视图和控制器

<mvc:View 
    xmlns="sap.m" 
    xmlns:mvc="sap.ui.core.mvc" controllerName=""> 
</mvc:View> 

和控制器的定义是这样的:

sap.ui.define([ 
    "sap/ui/core/mvc/Controller" 
], function (Controller) { 
    "use strict"; 
    return Controller.extend("", { 
    }); 
}); 

然而,当我在Eclipse中创建SAPUI5项目并使用选项New> SAPUI5 Application Development> View时,它会创建一个视图和一个如下所示的控制器:

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" 
     controllerName="" xmlns:html="http://www.w3.org/1999/xhtml"> 
</core:View> 

sap.ui.controller("", { 
}); 

一方面,以上述方式创建视图使我无法每次输入基本语法,另一方面,开发人员指南(特别是控制器)中的语法看起来更有组织性。

为什么我应该使用一种或另一种语法是否有特定的原因?或者我可以使用任何一种方法,在编程方面没有任何区

我使用v1.32进行开发。

非常感谢。

+0

检查您在eclipse中使用的UI开发版本吗? – Rayon

+0

是的。它是1.32.7 – Kumar

+0

在早期版本中,SAPUI5开发团队在文档中首选第一种语法。从版本1.30开始,更高版本的语法是首选的,它创建了一个类sap.ui.core.mvc.Controller的新子类,其名称为sClassName_ [[Ref ](https://openui5.hana.ondemand.com/docs/api/symbols/sap.ui.core.mvc.Controller.html#.extend)]。在将来的版本中,他们可能会放弃对早期语法的支持。 – Rayon

第一种语法(sap.ui.define)是首选语法。它也被称为AMD(异步模块声明)语法(请参阅this Wiki article for more information)。它包装在一个函数调用它能使模块(控制器你的情况)

  • 清晰,便于读取模块的声明
  • 模块(一旦所有的依赖加载)的异步调用

实现此语法的一个库是RequireJS,它也嵌入到SAPUI5(和OpenUI5 ofc)中。

在其关于控制库的文档中,SAPUI5团队还推荐使用AMD语法(请参阅here)。 sap.msap.ui包(我检查过)中的所有控件都使用AMD语法。您也可以阅读this interesting blog post from DJ Adams


然而,它没有声明(afaik)第二种语法已被废弃。但请记住,它是由Eclipse自动生成的,因为它(UI5插件)很少维护,因此不是最新的(他们更喜欢使用Node.js + grunt + Sublime/Visual Studio Code/etc开发)。

在那里,你可以通过做var Controller = sap.ui.core.mvc.Controller

+0

嗨,马克。再次感谢您的建议。视图声明怎么样 - 与? – Kumar

+0

DJ亚当斯在这里回答了这个问题:http://*.com/questions/24653251/sapui5-difference-between-coreview-and-mvcview伊莫它并没有真正回答这个问题,但它可能是有趣的阅读。也许'sap.ui.core.View'是'sap.ui.core.mvc.View'的快捷方式' – Marc

+1

@Kumar:几天前我偶然发现了这个:https://github.com/SAP/openui5/斑点/主/ SRC/sap.ui.core/SRC/SAP/UI /型芯/ XMLTemplateProcessor.js#L160。看起来像'mvc'是要走的路;) – Marc

对于视图的语法(required模块后),它会如果你了解它有助于让你的依赖更短的路径。

要声明一个XML 命名空间,则需要使用以下语法:

xmlns:<namespace>="<library the namespace refers to>" 

命名空间的目标是提供参考特定库的简便方式,而无需键入了它名称。在这种情况下:

<mvc:View 
    xmlns="sap.m" 
    xmlns:mvc="sap.ui.core.mvc" controllerName=""> 
</mvc:View> 

MVC:查看组件是指查看sap.ui.core.mvc库。 mvc:查看相当于sap.ui.core.mvc.View。不管你想要什么,你都可以命名你的命名空间

您在XML视图中声明的第一件事是您的视图中的容器。这是将包含视图的所有其他组件的组件 - 视图的根组件。您可以将不同库的组件用作视图的容器。在此示例中,您正在使用sap.ui.core.mvc库中的查看组件。在下面的例子:

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" 
    controllerName="" xmlns:html="http://www.w3.org/1999/xhtml"> 
</core:View> 

您在使用sap.ui.core库的查看组件。

以下行:

xmlns="sap.m" 

表示默认库。这是由没有命名空间声明的组件引用的库。如果后来在我看来,我宣布了以下组件:

<Input id="myinput"></Input> 

的UI5库将从默认库加载输入级,这里sap.m

从本质上讲,只有一个用于XML语法观点:

<myNamespace:myContainerComponent 
    xmlns="<my.default.library>" 
    xmlns:<myFirstNamespace>="my.namespace.library" 
    <!-- more if needed --> 
    controllerName="my.controller.name"> 

    <!-- All your other components --> 

</myNamespace:myContainerComponent> 

我不知道有足够的了解可能的控制器语法要能够解释它们。我会让一些人比我更深入地解释这些知识。

希望这可以帮助你,让事情变得更加清晰。