桌面應用程序員簡單嘗試Rich JavaScript Application


雖然10年前搞過一段時間的Web應用開發,且為所在企業設計了一個基於ASP.NET WebForms(在.NET 1.1的基礎上)的Web應用開發框架。但是,后來一直做的都是桌面類的應用,比如SmartClient,基於Silverlight的RIA,甚至到現在,我們公司的產品就是一個純客戶端的單機WinForms應用。所以,我應該是一個徹徹底底的桌面應用程序員了。已經很久不碰JavaScript這樣的東西了。

最近開始對JavaScript感興趣的原因,不外乎下面幾個:

  • 最近1年Node.js的極其火熱,想深入了解一下,尤其Azure(及WebMatrix)對Node.js強力支持更是加深了我的興趣;
  • ASP.NET MVC中內置了一個MVVM的JavaScript庫——KnockoutJS,想知道為什么微軟對KO情有獨鍾;
  • Windows 8 App可以使用JavaScript和HTML5來開發,可見就算是桌面應用,JavaScript未來也有用武之地;
  • 微軟推出了TypeScript,以及之前微軟非官方的Script#,還有CoffeeScript的被持續關注,都說明人們希望以更加簡單的方式來使用JavaScript開發大型更加Rich的應用程序

我做的簡單嘗試的場景如下:

  • 公司官網用php構建的,對php不是太熟悉,也不想去對原有網站框架做調整;
  • 公司博客基於wordpress構建
  • 需要在官網中自動顯示博客的最新文章列表

由於之前已經開始學習Knockout的東西,所以昨天決定基於KO來實現上述場景,這可以說是對KO的一點實際嘗試。具體做法如下:

  1. 在wordpress中安裝feed json插件,暴露json的接口
  2. 創建一個html文件部署到網站根目錄
  3. 在官網中創建一個欄目塊(支持自定義HTML),在其中插入iframe元素,指向上面的html文件。之前嘗試過在HTML中直接實現代碼,但是由於jQuery版本會沖突,所以改用iframe。

這個簡單應用程序的HTML文件如下:

<body>
    <div>
        <div data-bind="foreach: blogs">
            <p>
                <a data-bind="attr: {href: $data.permalink, title: $data.title}" target="_blank">
                    <span data-bind="text: $data.date"></span>: 
                <span data-bind="text: $data.title"></span>
                </a>
            </p>
        </div>
        <a href="blog" title="More" target="_blank">More</a>
    </div>
    <script type='text/javascript'>
        function Blog(data) {
            this.title = ko.observable(data.title);
            this.permalink = ko.observable(data.permalink);
            this.date = ko.observable(data.date.substr(0, 10));
        }

        function BlogViewModel() {
            var self = this;

            self.blogs = ko.observableArray([]);

            $.getJSON("/blog/?feed=json", function (allData) {
                var mappedBlogs = $.map(allData, function (item) { return new Blog(item) });
                self.blogs(mappedBlogs);
            });
        }

        ko.applyBindings(new BlogViewModel());
    </script>
</body>

上面HTML文件分作兩個部分。第一個部分就是用於顯示界面的HTML,第二部分是實體對象的定義和獲取數據執行綁定的JavaScript代碼。

在第一部分中,由於使用了MVVM思想的綁定機制,對於我而言是非常熟悉的,這個和XAML沒有太多區別。

第二部分中,首先利用jQuery獲取JSON數據並轉換為可綁定的JavaScript對象(這里真的簡單的讓我感到驚喜),可綁定是通過ko.observable來實現的;然后在ViewModel對象中提供一個可綁定的數組屬性給界面(即blogs屬性)。

上述功能雖然簡單,但是我覺得已經觸摸到了所謂Rich JavaScript Application或微軟稱之為 Scale JavaScript Application的實現途徑了。即:

  • 使用jQuery這樣的框架來簡化DOM的操作
  • 使用KnockoutJS或者AngularJS這樣庫或框架來簡化數據呈現,行為處理
  • 使用CoffeeScript或者TypeScript來簡化JavaScript的編寫
  • 開發可以跨瀏覽器運行的純客戶端應用,也具備和服務端的交互能力(一般基於RESTful),這樣的應用具有良好的交互性,可以完成復雜的數據操縱。

這里有一篇參考文章,值得一讀:

Rich JavaScript Applications – the Seven Frameworks (Throne of JS, 2012)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM