avalon对交互非常复杂的WEB应用具有天然的优势,它拥有两大神器:计算属性(这相当于后端WPF的DependencyProperty)与$watch回调。 我们的订餐系统的要求如下,它有一个总额统计,会在用户添加删除座位时重新计算它,并且与我们火车的座位一样,是分不同的档次,软卧肯定比软座贵,软座比硬座贵。我们需要使用一个数组来储存所有的座位,循环它们使用ms-each,而座位类型与价格成一一对照关系,这种结构使用哈希最合适,在JS中它的对象就是自带的哈希,循环它们使用ms-with。如何监听它们变动呢?座位数的变动我们可以监听它的长度,从而调用对应的回调。而选择座位类型时,我们一般使用下拉框,这时绑定一个ms-change事件,就搞定。

            function SeatReservation(name, type) {
this.name = name;
this.type = type
} var model = avalon.define('seatsVM', function(vm) {
vm.seats = [
new SeatReservation("Steve", "硬座"),
new SeatReservation("Bert", "软卧")
];
vm.types = {
"硬座": 20,
"软座": 39.99,
"软卧": 120
}
vm.totalSurcharge = 0
vm.addSeat = function() {
vm.seats.push(new SeatReservation("newName", "硬座"));
}
vm.changePrice = getPrice
}) function getPrice() {
var result = 0;
for (var i = 0, el; el = model.seats[i++];) {
result += model.types[el.type]
}
model.totalSurcharge = result.toFixed(2)
}
getPrice()//先求出已有座位的总票价
//监听增删
model.seats.$watch("length", getPrice)

上述代码中定义了一个微型类,它表示预票,上面有着座位的持有人与座位类型。统计总票价有getPrice方法处理,它有几个消费者,ms-change与$watch回调。ms-change位于视图的下拉框中,$watch回调是用于监听车票的数量变化。像总票价totalSurcharge 与 座位类型等重要消息都做成VM的一个属性,方便在视图中显示。

        <div  ms-controller="seatsVM">
<div class="page-header">
<h1> seatVM </h1>
</div>
<div class="info">
<h3 class="seats">座位预约(<span>{{seats.size()}}</span>)</h3>
<div class="money-wrap">
<h3 class="money" ms-visible="totalSurcharge > 0">
总计费用:$ {{totalSurcharge}}
</h3>
</div>
<div class="btns-wrap">
<button class="btn btn-primary" ms-click="addSeat" ms-enabled="seats.size() < 5">新增订位</button>
</div>
</div> <table class="table">
<thead>
<tr>
<th>姓名</th><th>档次</th><th>费用</th><th>操作</th>
</tr>
</thead>
<tbody ms-each-seat="seats">
<tr>
<td><input type="text" ms-duplex="seat.name" /></td>
<td>
<select ms-with="types" ms-duplex="seat.type" ms-mouseleave="changePrice">
<option ms-value="$key" >{{$key}}</option>
</select>
</td>
<td>{{console.log(seat.type),types[seat.type]}}</td>
<td><a href="javascript:void(0);" ms-click="$remove">删除</a></td>
</tr>
</tbody>
</table> </div>

在社图中我们还试验了许多钟绑定,如ms-enabled,每人限购五张票,ms-visible,没有买就不用显示价钱,ms-duplex用于绑定被选中的座位类型。

avalon.ready(function(){
function SeatReservation(name, type) {
this.name = name;
this.type = type
}

var model = avalon.define('seatsVM', function(vm) {
vm.seats = [
new SeatReservation("Steve", "硬座"),
new SeatReservation("Bert", "软卧")
];
vm.types = {
"硬座": 20,
"软座": 39.99,
"软卧": 120
}
vm.totalSurcharge = 0
vm.addSeat = function() {
vm.seats.push(new SeatReservation("newName", "硬座"));
}
vm.changePrice = getPrice
})

function getPrice() {
var result = 0;
for (var i = 0, el; el = model.seats[i++]; ) {
result += model.types[el.type]
}
model.totalSurcharge = result.toFixed(2)
}
getPrice()//先求出已有座位的总票价
//监听增删
model.seats.$watch("length", getPrice)
avalon.scan();
})

例子

seatVM

座位预约({{seats.size()}})

0">
总计费用:$ {{totalSurcharge}}

新增订位

姓名 档次 费用 操作

{{$key}}

{{types[seat.type]}} 删除

使用avalon 实现一个订座系统的更多相关文章

  1. windows API 开发飞机订票系统 图形化界面 (四)

    接下来的是录入航班.修改航班信息功能的实现: //录入航班 BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[]; TCHAR szFare[],s ...

  2. Java版飞机订票系统

    关注微信公众号:Worldhello 回复 飞机订票系统 可获得系统源代码并可加群讨论交流 数据结构课程设计题目:          [飞机订票系统]            通过此系统可以实现如下功能 ...

  3. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  4. 课程设计之(struts2+Hibernate)航空订票系统

    1.题目 课程设计之航空订票系统 为某家机票预订服务商开发一个机票预订和查询管理系统.该系统中的航班和机票信息由多家航空公司负责提供.客户通过上网方式查询航班时间表.机票可用信息.机票折扣信息,可以远 ...

  5. jQuery在线选座订座(影院篇)

    原文:jQuery在线选座订座(影院篇) 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选 ...

  6. 基于socket.io的实时在线选座系统

    基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交 ...

  7. loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过

    在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...

  8. loadrunner笔记(二):飞机订票系统--客户信息注册

    (一)  几个重要概念说明 集合点:同步虚拟用户,以便同一时间执行任务. 事务:事务是指服务器响应用户请求所用的时间,当然它可以衡量某个操作,如登录所需要的时间,也可以衡量一系列的操作所用的时间,如从 ...

  9. LoadRunner 自带订票系统flights 功能空白、1080端口被占用的解决办法

    LoadRunner 自带订票系统flights 功能空白.1080端口被占用的解决办法 安装LoadRunner8.1后运行Mercury Web Tours Application,点击fligh ...

随机推荐

  1. [Android] Android开发优化之——使用软引用和弱引用

      Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. ...

  2. HDU 1158 Employment Planning

    又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...

  3. 51nod1262 扔球

    相关讨论里的答案:(by mint_my ) 1.反弹n次,那起点S,每次反弹点,终点S共连接n+1条边,那么原问题变为从S走n+1条边回到S,为令n=n+12.设步长为a条边,gcd(a,n)==1 ...

  4. hdu 4619 Warm up 2 网络流 最小割

    题意:告诉你一些骨牌,然后骨牌的位置与横竖,这样求最多保留多少无覆盖的方格. 这样的话有人用二分匹配,因为两个必定去掉一个,我用的是最小割,因为保证横着和竖着不连通即可. #include <s ...

  5. Codeforces Round #276 (Div. 2)

    A. Factory 题意:给出a,m,第一天的总量为a,需要生产为a%m,第二天的总量为a+a%m,需要生产(a+a%m)%m 计算到哪一天a%m==0为止 自己做的时候,把i开到1000来循环就过 ...

  6. Sublime安装插件的方法

    一:打开:工具--命令面板 二:输入:package,,选择下拉列表里提示的install package 三:输入需要安装的插件的名称,如:angularJS  Less  sass 回车即可安装, ...

  7. 使用C++读写Excel

    1.导入Excel类型库 使用Visual C++的扩展指令#import导入Excel类型库: 1 2 3 4 5 6 7 8 9 10 11 12 #import "C:\\Progra ...

  8. BZOJ 4408 神秘数

    题解同各神犇的方法... #include<iostream> #include<cstdio> #include<cstring> #include<alg ...

  9. Java 动态眨眼 EyesJPanel (整理)

    /** * Java 动态眨眼 EyesJPanel (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * 注意事项: * 1.本程序为java程序,同时感谢您花费宝贵的时间来阅读本文档: ...

  10. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...