meteor introduction

体验meteor

27 May 2012

What?

先很简单的介绍下meteor,它的官网是:meteor.com,官方的介绍是:

Meteor is a set of new technologies for building top-quality web apps in a fraction of the time, whether you're an expert developer or just getting started.

翻译成中文大概就是:Meteor 是一套让用户在短时间内搭建一个高质量网页应用的新技术,面向的用户不仅是专业的开发者,还包括刚入门者。

它不是一种新语言,它应该算是一种开发框架,当然这和我们前端传统认识的框架是不同的两个概念。这是整个开发流程与方法的定义,一种新的开发模式。

Features

其官网上列了9个特点,就不一一复制了,我个人较喜欢的几个特点是:

  • Pure Javascript 这个不必多说,做为一个前端,这就是Meteor直接吸引我的主因
  • Live page updates 开发时的页面自动更新,这对开发效率是很有帮助的
  • Clean, powerful data synchronization 强大的数据同步能力,(这个有人喷会有安全问题,但是不否认这个让我在开发时体验非常棒)

其它的一些特点就不多说的.

hello world

照例,先来一个hello world,看看Meteor是如何构建应用的,当然也看它是否真的是很方便的短时间内就能构建完成。

如果你的机器上还没有安装过Meteor,当然你得先把Meteor环境安装到你的机器上,这是很简单的一件事,打开终端,输入如下命令执行即可:

$ curl install.meteor.com | sh

当然,meteor是依赖于nodejs的,所以,你得先确保机器上已有nodejs环境。

安装好后,要创建一个简单的hello world实在是太简单了,因为你执行:

$ meteor create helloworld

创建一个新项目,meteor会新建一个名为helloworld的目录,里面包括了三个文件:

➜  helloworld  tree
.
├── helloword.css
├── helloword.html
└── helloword.js

你在此文件夹中启动 meteor 服务,在浏览器中访问: localhost:3000 就能看到helloworld已经成功运行了。

这样可能会让不了解的人有些迷惑,所以,我把helloworld文件夹清空,我们从零开始来创建一个helloworld.

Html

进入到helloworld文件夹,新建一个html文件: index.html。编辑 index.html:

1 <title>Hello World</title>
2 <body>Hello World</body>

启动:meteor,在浏览器就能看到效果了。

Css

接着上面的,再新建一个 style.css 的文件,我们加点样式看看,注意你的浏览器变化:

1     
2 body {
3     color red;
4 }

可以看到,当你保存style.css后,浏览器立即就做出了相应反应,这种实时反应开发结果的开发模式显然是很能提高开发效率的,这不是meteor首创,有很多类似的库与工具都能实现相似的效果,但是meteor是集体到自身内部的,你完全无需去特别的配置,非常的简单,对于初学者来讲是很是友好。

Template

meteor 提供了一种非常方便的模板机制,让我们开发起来非常的舒服,比如上面的例子,我们再扩展开来,编辑index.html:

1 <head></head>
2 <body>
3   <h1>Hello World</h1>
4   {{> hello }}
5 </body>
6 <template name="hello">
7   <p>This is from template</p>
8 </template>

当然,meteor也可以很方便的从javascript文件中定义变量,下面我们新建一个javascript文件 app.js,并写入:

1 if (this.Template) 
2     Template.hello.who = function() {
3         return 'Lian Hsueh'; 
4     };

然后在html中通过 {{变量名}} 来访问javascript文件定义的变量值。如:

1     <template name="hello">
2         <p>This is from template, and I am {{who}}</p>
3     </template>

meteor的模板系统是非常强大的,后面在实例中可以慢慢体会。

后端?

讲了这么多,好像一直是停留在浏览器端,难道就这么简单么?显然不是的,meteor是支持后端的,用的是nodejs,语言就是javascript。那如何开始编写后端程序呢?其实上面的代码中有一部分已要是在后端也运行着,就是 app.js。

我们可以做个简单的测试来验证一下,编辑app.js,加入一行:

1  console.log('Hey, can you see me?');
2     

保存后查看终端与浏览器console,都能见到输出,证明 app.js 文件是同时运行在浏览器与服务端。

这就有疑问了,如果有的对象只能浏览器访问,有的则只能服务端访问,这怎么办?

meteor很好的解决了这个问题,简单的应用中,比如我们这个helloworld程序,只是包括很小部分的代码,你可以直接在 app.js 中通过 Meteor.is_client 与 Meteor.is_server 来限定哪些在浏览器中执行,哪些只在服务端中执行,如上面的给模板设定变量的语句,只需要在浏览器端执行,则可以这样写:

1  if (Meteor.is_client) {
2       Template.hello.who = function() {
3           return 'Lian Hsueh';
4       };
5   }

而像一些可以同时应用于前后端的脚本,你就不需要做特别的处理了,一份代码服务于前后端,比之前后端分离肯定是要高效很多。比如一个表单的验证脚本,通常你要前端一个检测的脚本,后端也要维护一份相同功能的代码,而此时我们只需要维护一份代码就好。

数据

一个完整的应用,必然要与数据打交道的,Meteor的数据通讯很棒,它操作数据也是异常的方便,如果使用过一些其它语言的ORM实现,应该能很好的去理解。

下面给helloworld添加点代码,用来显示从数据库中取得到一个列表,修改 app.js,添加:

1 var NameList = new Meteor.Collection('namelist');
2 if (Meteor.is_client) {
3   Template.hello.namelist = function() {
4       return NameList.find({});
5   };
6 }

然后修改 index.html:

1     <template name="hello">
2         <p>This is from template, and I am {{who}}</p>
3         <ul>
4             {{#each namelist}}
5             <li>{{ username }}</li>
6             {{/each}}
7         </ul>
8     </template>

数据库、表,这些都是直接与你代码collection对应,你完全不需要去在意,在意你的代码就行了。

此时数据库还没有数据,页面中也不会显示什么,要添加数据很简单,你可以直接在浏览器console中执行

Namelist.insert({username: 'xyududu'});

来添加一些数据,相应的也有remove与update方法。meteor较神奇的是,你对无论你在何地对数据库的操作都将实时的反应在页面中,所以你可以很方便的在开发时利用浏览器console来测试你的应用。

实例讲解

helloworld实在是太过简单了,完全不能领略meteor的强大,下面来完全一个完整的应用,看看meteor在实际使用中的表现。

从实例着手,一般就是做个blog了,恰巧w3ctech长沙站的各位哥也要求有这么一个blog来分享聚合一些技术文章。索性,就开始写这么一个blog程序,并让其可在实际中应用。

源码可到github获取,这里只提几个要点。

文件结构

要做一个较正式的应用,文件显然不能乱放,特别是我们前端,涉及众多javascrpt、css、images等等,如果随意摆放越往后就越头痛。我这里简单规划的一个文件结构如下:

➜  w3ctech  tree
.
├── client //文件夹,浏览器端使用
├── server //文件夹,服务端使用
└── static //文件夹,主要存放图片
数据结构

简单点搞,先就一个文章的数据表结构如下:

Article -- {
    title: String,
    author: String,
    content: String,
    tags: [String, …],
    createtime: Number
}
与Backbone结合

做web application,选一个好的前端MVC框架,会带来很多便利,显然 Meteor 与 Backbone 的结合是非常的理所应当。Meteor的官方也把 Backbone 做为一个内置 package。可以在命令行中很方便的给你的应用添加 backbone 支持:

$ meteor add backbone

另外我写css一般都用less,所以顺便我也把 less 引入进来:

$ meteor add less

meteor 现在可用命令添加的 package 有蛮多了,可至其官网查询。

好,继续说 Backbone, 先看下面代码:

 1 var Blog = Backbone.Router.extend({
 2     routes: {
 3         "admin": "backend",
 4         ":article_id": "showArticle",
 5         "": 'index'
 6     },
 7     index: function() {
 8         Session.set("article_id", null);
 9         Session.set("backend", null);
10     },
11     backend: function() {
12      if ($.cookie('admin')) {
13             Session.set("backend", 'post');
14         } else {
15             Session.set("backend", 'login');
16         }
17     },
18     showArticle: function ( _id ) {
19         Session.set("article_id", _id);
20         Session.set("backend", null);
21     },
22     changeTo: function( _id ) {
23         this.navigate(_id, true);
24     }
25     
26 });
27 
28 Router = new Blog();
29 Meteor.startup(function () {
30  Backbone.history.start({pushState: true});
31 });

如果你之前用 Backbone 写过应用之类的,应该能很快理解上面的代码,开启一个全局路由,捕获 url 的变化而执行相应的方法。这样就很方便的控制应用的显示,从而模拟出传统页面的切换。

内容的展示

Meteor 负责页面渲染主要是通过模板,可以说你了解了如何控制模板,你就能用 Meteor 写出牛B的应用。其实基本上所有的富前端应用都是非常的倚重模板的。

Meteor 的模板上面的提过一个是 Template,还有一个是 Meteor.ui,这两个都是负责把数据组合到模板并渲染到页面。我此次的 demo 大量的使用了 Template。

拿列表页来说,主要功能就是把文章的标题与时间以列表的形式显示在页面中。查看其模板代码:

 1     <template name="list">
 2     <ul>
 3         {{#each list}} 
 4         <li>
 5         <time datetime="{{createtime}}">{{formarttime}}</time>
 6         <a 
 7             id="{{ _id }}"
 8             href="/{{ _id}}">{{ title }}</a></li>
 9         {{/each}} 
10     </ul>
11     </template>

然后在javascrpt文件中可以直接以 Template.list 来操作这块模板。比如这个例子中:

 1 var listTpl = Template.list;
 2 listTpl.list = function() {
 3     return Article.find({});
 4 };
 5 listTpl.formarttime = function() {
 6     return moment( this.createtime ).fromNow();
 7 }
 8 listTpl.events = {
 9     'click li>a': function( _e ) {
10         var key = _e.target.id;
11         Router.changeTo( key );
12         return false;
13     }
14 };

指定 list 数据,还有一个 formarttime 是格式化时间,在模板中可以直接以 {{formarttime}} 来调用。

events

你的应用要与用户交互,必然就离不开事件,根据用户的操作而触发不同的事件来响应用户。 Meteor 的事件在模板中可以很方便的绑定,其实本质上应该是一个总的委托在模板上的事件。这种处理方式现在应该很常见了,比如 jquery 的 delegate(), Backbone 模板的事件处理也是类似的。

Meteor的事件可以直接绑在 Template 对象的 events 属性上。如上面的:

1 listTpl.events = {
2     'click li>a': function( _e ) {
3         var key = _e.target.id;
4         Router.changeTo( key );
5         return false;
6     }
7 };
deploy or host yourself

应用写完了,如果你打算把服务托管到 meteor 上,那就非常方便,你可以直接命令行:

$ meteor deploy yourappname.meteor.com

上传完成后,你就可以直接以:yourappname.meteor.com 来访问你的应用了。

而且很舒服的一点是,你不需要去管你的javascript文件与css文件是否合并,是否压缩,因为这些都是 meteor 会自动完成的。

当然你可以把应用托管在你自己的服务器中,你可以用 meteor bundle 来进行代码打包,然后就可以方便的上传到你自己的服务器了。

PPT

Showing 0 comments

Sort by               Popular now              Best rating              Newest first              Oldest first              Subscribe by email   Subscribe by RSS

Add New Comment

Optional: Login below.

Trackback URL 
—  ChangShaHuNanChina
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值