2016-03-02 35 views
0

當我看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

回答

3

第一種語法(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://stackoverflow.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

0

對於視圖的語法(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> 

我不知道有足夠的瞭解可能的控制器語法要能夠解釋它們。我會讓一些人比我更深入地解釋這些知識。

希望這可以幫助你,讓事情變得更加清晰。

相關問題