虽然10年前搞过一段时间的Web应用开发,且为所在企业设计了一个基于ASP.NET WebForms(在.NET 1.1的基础上)的Web应用开发框架。但是,后来一直做的都是桌面类的应用,比如SmartClient,基于Silverlight的RIA,甚至到现在,我们公司的产品就是一个纯客户端的单机WinForms应用。所以,我应该是一个彻彻底底的桌面应用程序员了。已经很久不碰JavaScript这样的东西了。
最近开始对JavaScript感兴趣的原因,不外乎下面几个:
我做的简单尝试的场景如下:
由于之前已经开始学习Knockout的东西,所以昨天决定基于KO来实现上述场景,这可以说是对KO的一点实际尝试。具体做法如下:
这个简单应用程序的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的实现途径了。即:
这里有一篇参考文章,值得一读: