如何使用 jquery-mobile 和 Knockoutjs 构建 web 应用程序 [英] How to architecture a webapp using jquery-mobile and knockoutjs
问题描述
我想构建一个移动应用程序,除了 html/css 和 JavaScript 之外别无他物.虽然我对如何使用 JavaScript 构建网络应用程序有一定的了解,但我想我可能会研究一下像 jquery-mobile 这样的框架.
起初,我认为 jquery-mobile 只不过是一个针对移动浏览器的小部件框架.与 jquery-ui 非常相似,但适用于移动世界.但我注意到 jquery-mobile 不止于此.它带有一堆架构,让您可以使用声明性 html 语法创建应用程序.因此,对于最容易想到的应用程序,您不需要自己编写一行 JavaScript(这很酷,因为我们都喜欢少工作,不是吗?)
为了支持使用声明性 html 语法创建应用程序的方法,我认为将 jquery-mobile 与 Knockoutjs 结合起来是一个很好的选择.Knockoutjs 是一个客户端 MVVM 框架,旨在将 WPF/Silverlight 中已知的 MVVM 超能力引入 JavaScript 世界.
对我来说,MVVM 是一个新世界.虽然我已经阅读了很多关于它的内容,但我之前从未真正使用过它.
所以这篇文章是关于如何一起使用 jquery-mobile 和knockoutjs 来构建一个应用程序.我的想法是写下我在看了几个小时后想出的方法,并让一些 jquery-mobile/knockout yoda 对其进行评论,向我展示为什么它很糟糕以及为什么我不应该首先进行编程地方;-)
html
jquery-mobile 在提供页面的基本结构模型方面做得很好.虽然我很清楚我可以在之后通过 ajax 加载我的页面,但我决定将所有页面都保存在一个 index.html 文件中.在这个基本场景中,我们讨论的是两个页面,因此掌握最重要的内容应该不会太难.
<头><title>页面标题</title><link rel="stylesheet" href="libs/jquery-mobile/jquery.mobile-1.0a4.1.css"/><link rel="stylesheet" href="app/base/css/base.css"/><script src="libs/jquery/jquery-1.5.0.min.js"></script><script src="libs/knockout/knockout-1.2.0.js"></script><script src="libs/knockout/knockout-bindings-jqm.js" type="text/javascript"></script><script src="libs/rx/rx.js" type="text/javascript"></script><script src="app/App.js"></script><script src="app/App.ViewModels.HomeScreenViewModel.js"></script><script src="app/App.MockedStatisticsService.js"></script><script src="libs/jquery-mobile/jquery.mobile-1.0a4.1.js"></script>头部><身体><!-- 第一页开始--><div data-role="page" id="home"><div data-role="header"><h1>演示应用</h1></div><!--/header --><div data-role="内容"><div class="ui-grid-a"><div class="ui-block-a"><div class="ui-bar" style="height:120px"><h1>今日游览(请等待10秒看效果)</h1><p><span data-bind="text: toursTotal"></span>总计</p><p><span data-bind="text: toursRunning"></span>运行<p><span data-bind="text: toursCompleted"></span>完成</p>
<fieldset class="ui-grid-a"><div class="ui-block-a"><button data-bind="click: showTourList, jqmButtonEnabled: toursAvailable" data-theme="a">旅游列表</button></div></fieldset></div><!--/content --><div data-role="footer" data-position="fixed"><h4>克里斯托夫·伯格多夫</h4></div><!--/header --></div><!--/page --><!-- 旅游列表页面--><div data-role="page" id="tourlist"><div data-role="header"><h1>条形</h1></div><!--/header --><div data-role="内容"><p><a href="#home">返回首页</a></p></div><!--/content --><div data-role="footer" data-position="fixed"><h4>克里斯托夫·伯格多夫</h4></div><!--/header --></div><!--/page -->