博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用avalon 实现一个订座系统
阅读量:6172 次
发布时间:2019-06-21

本文共 2701 字,大约阅读时间需要 9 分钟。

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的一个属性,方便在视图中显示。

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

总计费用:$ {
{totalSurcharge}}

姓名 档次 费用 操作
{
{console.log(seat.type),types[seat.type]}}
删除

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

例子

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

总计费用:$ {
{totalSurcharge}}

新增订位
姓名 档次 费用 操作
{
{$key}}
{
{types[seat.type]}}
删除

转载地址:http://xlvba.baihongyu.com/

你可能感兴趣的文章
在图片中加入噪点就能骗过 Google 最顶尖的图像识别 AI
查看>>
免费下载!业界首部安卓热修复宝典出炉,阿里技术大牛联袂推荐
查看>>
OpenID 关联认证提供 CoreOS dex
查看>>
《Node.js区块链开发》一2.2 信用,决定着利益转移的方向
查看>>
Speedy:来自京东的 Docker 镜像存储系统
查看>>
《动手玩转Arduino》——11.2 众多的Arduino板
查看>>
IBM Watson 进入癌症基因组分析市场
查看>>
在 Linux 中查看你的时区
查看>>
Linux集群和自动化维1.6 小结
查看>>
《OpenACC并行编程实战》—— 第1章 并行编程概览 1.1 加速器产品
查看>>
C语言OJ项目参考(2417) 字符串长度
查看>>
ajax的手写、封装和自定义设置
查看>>
class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist
查看>>
android自定义属性
查看>>
ERROR 1114 (HY000): The table 'table1' is full
查看>>
知乎网友神回复:哪怕是平时聊天吹牛的也没见程序员晒,这是为什么呢?
查看>>
Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!...
查看>>
phalapi-进阶篇2(DI依赖注入和单例模式)
查看>>
MySQL 5.7.5 : GTID_EXECUTED系统表
查看>>
Hybrid框架UI重构之路:四、分而治之
查看>>