nodejs + jquery Mobile构建一个简单的移动web (客户端)

前面展示了使用nodejs技术和jqm来搭建一个简单的支持CRUD操作应用的服务端部分(参见:nodejs
+ jquery
Mobile构建一个简单的移动web(服务端)
 ),服务端采用nodejs技术实现,使用了mongodb数据库和轻量级web开发框架expressJS,
路由使用restful风格,所以你也可以使用restify来开发。

客户端的实现主要通过ajax调用实现.使用jade模板引擎.

客户端主要包含两个文件:layout.jade和index.jade

1. layout.jade 布局文件,包含应用所需的的js和css文件


!!! 5
html
head
title=‘nodejsJQM‘
meta(name=‘viewport‘, content=‘width=device-width, initial-scale=1‘)
meta(name=‘apple-mobile-web-app-capable‘, content=‘yes‘)
meta(name=‘apple-mobile-web-app-status-bar-style‘, content=‘black‘)
link(rel=‘stylesheet‘, href=‘http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css‘)
script(src=‘http://code.jquery.com/jquery-1.9.1.min.js‘)
script(src=‘http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js‘)
body!= body

2.index.jade 主界面文件,应用采用多页面设计

a. 首页面


div#index(data-role=‘page‘)
div(data-role=‘header‘ ,data-theme=‘b‘)
h1 NodeJs and Jqm
a.ui-btn-right(href=‘#add‘ , data-icon=‘plus‘) add

div(data-role=‘content‘)
ul(data-role=‘listview‘,data-inset=‘true‘,id=‘fruitsList‘)
- for(var index=0; index<fruits.length; index++) {
li
a(href=‘#fruitview‘, id=fruits[index]._id)
img(src=‘1.png‘)
h3=fruits[index].title
p=fruits[index].content
- }

div(data-role=‘footer‘,data-position=‘fixed‘)
div(data-role=‘navbar‘,data-theme=‘b‘)
ul
li
a(href=‘#index‘,data-theme=‘b‘) Home
li
a(href=‘#‘,data-theme=‘b‘) Blog
li
a(href=‘#‘,data-theme=‘b‘) Email

b. 视图页面,用于查看指定的对象


div#fruitview(data-role=‘page‘)
div(data-role=‘header‘,data-theme=‘b‘)
a(data-rel=‘back‘,data-icon=‘back‘,data-derection=‘reverse‘) back
h1 fruit view
div(data-role=‘content‘)
div(data-role=‘filedcontain‘)
label(for=‘ftitle‘) Title:
h1#ftitle
div(data-role=‘filedcontain‘)
label(for=‘fdesc‘) Desc:
p#fdesc
div.ui-bar(data-role=‘footer‘,data-theme=‘b‘,data-position=‘fixed‘)
div(data-role=‘controlgroup‘,data-type=‘horizontal‘)
a(href=‘#editfruit‘,data-icon=‘gear‘,data-transition=‘flip‘) edit
a(href=‘#confirmDialog‘,data-icon=‘delete‘,data-rel=‘dialog‘) Delete

c.添加新对象页面


div#add(data-role=‘page‘)
div(data-role=‘header‘,data-theme=‘b‘)
a(data-rel=‘back‘,data-icon=‘back‘,data-derection=‘reverse‘) back
h1 Add fruit
a(href =‘#add‘,data-icon=‘plus‘) Add

div(data-role=‘content‘)
div(data-role=‘filedcontain‘)
label(for=‘fruit-title‘) title
input(type=‘text‘,value=‘‘,id=‘fruit-title‘,name=‘fruit-title‘)
div(data-role=‘filedcontain‘)
label(for=‘fruit-content‘) content
input(type=‘text‘,value=‘‘,id=‘fruit-content‘,name=‘fruit-content‘)
div(data-role=‘footer‘,data-position=‘fixed‘,data-theme=‘b‘)
a#save-btn(href=‘#‘,data-icon=‘check‘) Save

d.
通过ajax请求数据部分,监听页面的beforepageshow事件,在指定页面被载入时候处理数据的初始化工作,关于beforepageshow事件参考jqm文档


script
var mdstore = {};

$(function() {
$("#fruitsList").delegate(‘a‘, ‘click‘, function(e) {
mdstore.selectedid = this.id;
});

$("#index").bind(‘pagebeforeshow‘, function(e, ui) {
$.get(
‘fruits/list‘
, function(data) {
$("#fruitsList").empty();
for(var index=0; index < data.length; index++) {
$("#fruitsList").append(‘<li><a href="#fruitview",id="‘ + data[index]._id + ‘"><img src="1.png" /><h3>‘ + data[index].title + ‘</h3><p>‘ + data[index].content + ‘</p></a></li>‘);
}
$("#fruitsList").listview(‘refresh‘);
}
);
});

$("#add").bind(‘pagebeforeshow‘, function(e, ui) {
$("#fruit-title").val(‘ ‘);
$("#fruit-content").val(‘ ‘);
});

$("#fruitview").bind(‘pagebeforeshow‘, function(e, ui) {
$("#ftitle").html(‘ ‘);
$("#fdesc").html(‘ ‘);

$.get( ‘fruits/‘ + mdstore.selectedid , function(data){
$("#ftitle").html(data.title);
$("#fdesc").html(data.content);
});
});

$("#editfruit").bind(‘pagebeforeshow‘,function(e,ui){
$("#edit-fruit-title").val(‘ ‘);
$("#edit-fruit-desc").val(‘ ‘);
$.get(‘fruits/‘+mdstore.selectedid , function(data){
$("#edit-fruit-desc").val(data.content);
$("#edit-fruit-title").val(data.title);
});
});

$("#save-btn").bind(‘click‘, function(e) {
$.post(
‘fruits‘
, { title : $("#fruit-title").val(),content:$(‘#fruit-content‘).val()}
, onSuccess
, ‘json‘
);
});

$(‘#edit-save‘).bind(‘click‘,function(e){
$.ajax({
type: ‘PUT‘,
url:‘fruits/‘ + mdstore.selectedid,
data:{title:$("#edit-fruit-title").val() , content:$("#edit-fruit-desc").val()},
success : onSuccess,
dataType : ‘json‘
});
});

$(‘#btnDel‘).bind(‘click‘,function(e){
$.ajax({
type:‘DELETE‘,
url:‘fruits/‘ + mdstore.selectedid,
success:onSuccess
});
});
function onSuccess(data) {
$(‘#info‘).html(data.message);
$.mobile.changePage(‘#msgDialog‘, {transition : ‘slidedown‘, role : ‘dialog‘});
};
});

例子下载

说明: 例子包含index.js 服务端文件,views文件夹包含index.jade等视图(页面)文件 , public文件夹只包含一张图片

如果你想运行该文件 你需要安装一些nodejs模块 :

mongoose , jade , mongodb 和 expressjs(3.x)

同时保证mongodb数据服务已经启动,然后再cmd切换到index.js 所在的目录,输入 node index.js

访问通过: http://127.0.0.1:8888

时间: 2024-10-20 02:00:58

nodejs + jquery Mobile构建一个简单的移动web (客户端)的相关文章

用jQuery Mobile搭建一个简单的手机页面

1.新增html页面. 2.声明html5Document. 3.载入jQuery Mobile Css.jQuery与jQuery Mobile链接库. 4.使用jQuery Mobile定义的html标准.编写网页架构及内容. 向网页中添加jQuery Mobile,添加方法如下: 从CDN引用jQuery Mobile(推荐) <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jque

从零构建一个简单的 Python Web框架

为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何工作的很感兴趣,因为你想要成为一位更好的 web 开发者. 接下来的笔墨将着重于最后一点.这篇文章旨在通过对设计和实现过程一步一步的阐述告诉读者,我在完成一个小型的服务器和框架之后学到了什么.你可以在这个代码仓库中找到这个项目的完整代码. 我希望这篇文章可以鼓励更多的人来尝试,因为这确实很有趣.它让

第一节 构建一个简单的WCF应用

先吐个槽,到目前为止接触的东西也就是些ado.net.select.delete.update.create.临时表的批量操作.及稍微复杂点的几个表之间查询再带几个excel导入导出 然后会点前端的js.jquery等,所以在公司目前薪水并不高(能在广州生活下去吧,什么买车买房的想都别想),拿自己身边的同志一比较感觉心里不怎么平衡,凡事还是得靠自己 自强才是硬道理,就吐到这里吧!开始我的wcf之旅吧 本人理工科类型的文笔很烂 希望各位大神不要喷小弟哦(参照的书本:WCF全面解析) 咱们还是从小学

通过python 构建一个简单的聊天服务器

构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使用 Telnet,客户机可以连接到 Python 聊天服务器上,并在全球范围内相互进行通信.提交到聊天服务器的消息可以由其他人进行查看(以及一些管理信息,例如客户机加入或离开聊天服务器).这个模型如图 1 所示. 图 1. 聊天服务器使用 select 方法来支持任意多个客户机 聊天服务器的一个重要

第三周——构建一个简单的Linux系统MenuOS

[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 第三周  构建一个简单的Linux系统MenuOS

Android学习路线(四)构建一个简单的UI

Android应用的图形化用户界面的构建使用的是View 和 ViewGroup 对象的层次嵌套. View 对象通常是UI部件,例如 buttons 或者 text fields ,而 ViewGroup 是用来定义它的子布局如何排布的容器,它通常是不可见的,例如一个网格或者一个垂直的列表. Android提供XML词汇与View或者ViewGroup的子类的对应,这样的话你就可以通过XML元素的层级嵌套来定义你的UI. 另一种布局 使用XML声明UI比在运行时代码中声明更有用处可以在很多地方

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)

构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核代码简介 内核源码三个个重要目录 arch占有代码量最大,支持不同cpu的源代码,arch/x86目录下的代码是我们关注的重点 init,内核启动相关的代码基本都在init目录下,init/main.c中start_kernel是整

Android官方入门文档[3]构建一个简单的用户界面

Android官方入门文档[3]构建一个简单的用户界面 Building a Simple User Interface构建一个简单的用户界面 This lesson teaches you to1.Create a Linear Layout2.Add a Text Field3.Add String Resources4.Add a Button5.Make the Input Box Fill in the Screen Width You should also read?Layouts