不過這次會議也有另外一個感想,就是 web developer 還是比較希望維持原有的開發模式,而不僅只是使用 javascript 語言來撰寫程式。翻開 seed/gjs 寫的 javascript 源碼,開發的思維其實跟 python 差不多,幾乎都可以從 python 無痛轉換了。
而 seedkit 就是打算維持原本 web application 的開發模式而設計的工具。在 seedkit-viewer 的 example 裡面提供了一些有趣的範例。比如說 dbus-rhythmbox 這個範例,他透過 dbus 的方式控制歌曲的上、下首切換。
右邊的 seedkit-viewer 視窗裡面的 next/previous 可以操作 rhythmbox 上、下首。這個程式與 rhythmbox 是兩個獨立的程式,而不是 rhythmbox 的外掛。
這個功能可以在各種語言用 dbus 實做出來。不過在 Seedkit 的實做方式則是比較近乎 web application 的開發方式。首先我們看源碼中的 ui.html (沒錯是 HTML 檔案)。
<html> <head> <link rel="stylesheet" href="./ui.css" type="text/css" media="all" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script src="./ui.js"></script> </head> <body> <div class="demo"> <img id="cover-art"></img> <div id="prev-button" class="button">Prev</div> <div id="next-button" class="button">Next</div> <div id="file-uri"></div> </div> </body> </html>
基本上就是使用 jquery 函式庫,並引入了 ui.js 這個 javascript。接下來是 ui.js。
Seed.include("./dbus-rhythmbox.js"); $(document).ready(function(){ var shell = new RhythmboxShell(); var player = new RhythmboxPlayer(); //playeplayer.getVolumeRemote(function (volume) {print("oi")}); $("#next-button").click(function(){ player.nextRemote(); }); $("#prev-button").click(function(){ player.previousRemote(); }); player.connect("playingUriChanged", function(emitter, uri){ //var song = shell.getSongPropertiesRemoteSync(uri); //print(song); }); player.connect("playingSongPropertyChanged", function(emitter, title, property_name, old_value, new_value){ if (property_name == "rb:coverArt-uri") $("#cover-art").attr('src', new_value); }); });
這段也相當簡單,就是按下 next 或 previous 之後去呼叫 player.nextRemote/previousRemote,並且使用了 jquery 的語法。至於 player 則定義於 dbus-rhythmbox.js 裡面。
另外,這個範例為了方便的操作 dbus,所以做了一個 wrapper 在 dbus-local.js,有興趣的話可以翻一下,特別是把 next mapping 到 nextRemote 可以翻一下 proxifyPrototype 這個函式。
基本上 seedkit 讓開發桌面程式的方式盡可能的接近網頁應用程式,並且還是可以使用系統的 API 去作檔案 IO、網路存取、dbus、notification 之類的系統 API,感覺起來是 GTK 裡面比較完整的解決方案。
而更棒的是 seedkit 也可以當作一個 Gtk Widget,你可以將這些程式片段嵌入在 UI 的一部分,這也保持了開發彈性,開發者還是可以選用其他的 UI 函式庫如 Clutter 或是 GTK,而不是只能使用 Web Application 的 View。
沒有留言 :
張貼留言