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

  1. function SeatReservation(name, type) {
  2. this.name = name;
  3. this.type = type
  4. }
  5.  
  6. var model = avalon.define('seatsVM', function(vm) {
  7. vm.seats = [
  8. new SeatReservation("Steve", "硬座"),
  9. new SeatReservation("Bert", "软卧")
  10. ];
  11. vm.types = {
  12. "硬座": 20,
  13. "软座": 39.99,
  14. "软卧": 120
  15. }
  16. vm.totalSurcharge = 0
  17. vm.addSeat = function() {
  18. vm.seats.push(new SeatReservation("newName", "硬座"));
  19. }
  20. vm.changePrice = getPrice
  21. })
  22.  
  23. function getPrice() {
  24. var result = 0;
  25. for (var i = 0, el; el = model.seats[i++];) {
  26. result += model.types[el.type]
  27. }
  28. model.totalSurcharge = result.toFixed(2)
  29. }
  30. getPrice()//先求出已有座位的总票价
  31. //监听增删
  32. model.seats.$watch("length", getPrice)

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

  1. <div ms-controller="seatsVM">
  2. <div class="page-header">
  3. <h1> seatVM </h1>
  4. </div>
  5. <div class="info">
  6. <h3 class="seats">座位预约(<span>{{seats.size()}}</span>)</h3>
  7. <div class="money-wrap">
  8. <h3 class="money" ms-visible="totalSurcharge > 0">
  9. 总计费用:$ {{totalSurcharge}}
  10. </h3>
  11. </div>
  12. <div class="btns-wrap">
  13. <button class="btn btn-primary" ms-click="addSeat" ms-enabled="seats.size() < 5">新增订位</button>
  14. </div>
  15. </div>
  16.  
  17. <table class="table">
  18. <thead>
  19. <tr>
  20. <th>姓名</th><th>档次</th><th>费用</th><th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody ms-each-seat="seats">
  24. <tr>
  25. <td><input type="text" ms-duplex="seat.name" /></td>
  26. <td>
  27. <select ms-with="types" ms-duplex="seat.type" ms-mouseleave="changePrice">
  28. <option ms-value="$key" >{{$key}}</option>
  29. </select>
  30. </td>
  31. <td>{{console.log(seat.type),types[seat.type]}}</td>
  32. <td><a href="javascript:void(0);" ms-click="$remove">删除</a></td>
  33. </tr>
  34. </tbody>
  35. </table>
  36.  
  37. </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. cocos2dx Android 环境搭建 以及 ndk调试

    最近在学习cocos2dx,真的很强大,使我们更专注于游戏趣味,免去了繁琐的底层框架代码. cocos2dx的最强大之处当然在于跨平台.跨平台首选当然是Android,好记性不如烂笔头,记下本文分享给 ...

  2. SHOI2008 题目总结

    感觉还是上海人出题水平高?这套题写得心旷神怡的...总之很难就是啦 由于我实在不适应博客园这种排版和字体..所以我的文章可能会特别难看大家见谅..说不定回头开发一个支持全局LaTeX的博客也不错?23 ...

  3. Css中光标,DHTML,缩放的使用

    Css中光标的使用: 属性名称                属性值                                         说明cursor                 ...

  4. 菜鸟学习笔记3——jQuery 选择器

    jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...

  5. POJ 1861 Network (MST)

    题意:求解最小生成树,以及最小瓶颈生成树上的瓶颈边. 思路:只是求最小生成树即可.瓶颈边就是生成树上权值最大的那条边. //#include <bits/stdc++.h> #includ ...

  6. 今天开始自学Andrew Ng的机器学习,希望可以坚持下来

    今天开始正式接触机器学习,20集的课程争取在开学前看完.每看完一集会在博客记录笔记,加油! 版权声明:本文为博主原创文章,未经博主允许不得转载.

  7. ios ViewController 页面跳转

    从一个Controller跳转到另一个Controller时,一般有以下2种: 1.利用UINavigationController,调用pushViewController,进行跳转:这种采用压栈和 ...

  8. Nodepad++ tab改成4个空格

    设置-首选项-选项卡设置-使用空格替换

  9. CMake实践(4)

    一,本期目标: [sun@localhost t4]$ cat README 任务:如何使用外部共享库和文件 二,目录结构 [sun@localhost t4]$ tree ../t4../t4├── ...

  10. Android学习随笔--ListView的分页功能

    第一次写博客,可能格式,排版什么的会非常不美观,不过我主要是为了记录自己的Android学习之路,为了以后能有些东西回顾.既然是为了学习,那我肯定会吸收各位大大们的知道经验,有不足的地方请指出. 通过 ...