UX Markup語言之如何建立一個新的類

衣咸注:前面我們在《如何在Fuse中建立自定義的UI組件類》這篇文章有講過如何建立一個自定義的組件類,如果說前文講的是操作層面的內容的話,那么本文講的則針對新建類的后臺實現方式與運作機制的分析。

一個簡單的.ux文件

一個簡單的被命名為MyApp.ux的UX Markup代碼文件一般如下:
<pre>
<App Theme="Basic">
<Text Value="Hello, World!" />
</App>
</pre>

在通過Fuse編譯器編譯后,Uno編譯系統將轉換上述代碼為等價的Uno代碼,如下:
<pre>
public class MyApp: Fuse.App
{
public MyApp()
{
InitializeUX();
}

internal void InitializeUX()
{
    Theme = Fuse.BasicTheme.Singleton;
    RootNode = new Text() { Value = "Hello, World!" };
}

}
</pre>

給你的類命名

默認狀態時,類使用的名稱取自定義他自身的.ux文件名前綴。在上述例子中的類將取MyApp.ux文件名的前綴作為類命名,也就是MyApp。本文英文原文:https://www.fusetools.com/learn/guides/ux-markup-creating-new-classes

你也可以在你的根節點使用ux:Class屬性來指定一個不同的名稱(和命名空間):
<pre>
<App Theme="Basic" ux:Class="NinjaProductions.NinjaApp">
<Text Value="Hello, World!" />
</App>
</pre>

這將會產生出如下代碼:
<pre>
namespace NinjaProductions
{
public class NinjaApp: Fuse.App
{
...
}
}
</pre>

你也可以在一個UX文檔中指定你的內部類,具體參看Fuse手冊的《Styling and Resources》章節的詳述。

每一個XML元素都是對象

在一個UX Markup文檔中的每一個XML元素都是一個簡單的對象——一個從Uno類中實例化而來的對象。
這意味著下面的UX代碼:
<Button Text="OK" />
大致等價于:
<pre>
var temp1 = new Button();
temp1.Text = "OK";
</pre>

在你的UX文檔中,每一個XML元素都可以在你的代碼編輯器里邊選擇Go to Source來查看他詳細的實施執行細節。(衣咸注:不過我沒有找到哈!)

給對象建立一個后端支持字段(ux:Name)

當設立一個你自己的類時,默認狀態為,通過引用所產生的對象僅僅存儲在臨時變量集中。
如果你想要存儲一個引用所產生的對象到你的類中的后端字段,你可以給他一個名稱,使用屬性ux:Name

<Button Text="OK" ux:Name="button1" />

這將在你的類中合成產生一個用button1命名的內部字段:

internal Button button1;

然后,分配這個新產生的類到那個字段中,來代替一個臨時的變量:
button1 = new Button();
button1.Text = "OK";
你也可以參看:《UX Markup語言之屬性與梆定

后臺代碼(代碼后置)

定義:每一個UX(后綴為.ux)文件都會產生一個partial局部類,這意思是你自由地增加了額外的Uno文件到你的項目中,他使用了你自己自定義的Uno代碼來拓展擴充了所產生的Uno代碼。這種機制就稱為代碼后置(也可稱為后臺代碼)。

這些后臺代碼通常包含了與你的UI層級交互的邏輯,像額外的設置代碼呀、數據全域data population、自定義事件處理等。

如果一個UX文件被命名為Foo.ux,那么與之相應的后代碼就特別地被命名為Foo.ux.uno

注意,后臺代碼不同于你項目文件里面的.cache文件夾中的所產生的對應的合成碼,他們被命名為Foo.ux.g.uno

使用ux:AutoCtor來禁用默認的構建器constructor

你的UX層級將會建立,在產生的合成InitializeUX方法中。
默認狀態,將會自動為你的類建立一個默認的構建器用來調用呼叫這個方法。

一些時候你想要在后臺代碼中手動地控制你的類的構建器,為了做到這些,你常常需要禁用自動產生的構建器。你可以通過指定ux:AutoCtor="false"在你的類元素中來實現,像這樣:

<pre>
<App ux:AutoCtor="false" ux:Class="MyApp">
...
</App>
</pre>

然后,在你的后臺代碼中你做的實際上是:
<pre>
public partial class MyApp
{
public MyApp()
{
InitializeUX();

    // ... Custom code here
}

}
</pre>

Tag:Fuse, Fuseapp, Fusetools, native app
發布時間:2016年05月14日
博客被黑,挪窩簡書安家……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容