购物车的简单示例

【代码分析】
listview所在的ui文件是source://view/index.ui, 模板cell所在的ui文件是source://view/cell.ui,这2个文件都在一个Page上,但是处于不同的闭包环境。

* 数据分享:可以通过js环境的全局变量来分享,但是不建议使用不带var的变量声明,可以使用deviceone这个共享区
//index.ui.js 定义变量

//定义2个全局变量
deviceone.checked = "source://view/checked.png";
deviceone.unchecked = "source://view/unchecked.png";

//cell.ui.js 使用变量

checkedLayout.on("touch", function() {
        if (checkedImage.source==deviceone.checked) {
                checkedImage.source = deviceone.unchecked;
        } else {
                checkedImage.source = deviceone.checked;
        }
        fireMyorder();
})

* 从index.ui传递数据到cell.ui :这种方式是listview大家看的比较常见的例子,通过数据bind的方式
//index.ui.js 获取数据,bind数据

var json_path = "data://do_ListView/cars.json";// 本地缓存的数据

if (storage.fileExist(json_path)) {
        storage.readFile(json_path, function(data, e) {
                // deviceone.print(JSON.stringify(data));
                listdata.addData(data);
                listview.bindItems(listdata);
                listview.refreshItems();
        })
}

//cell.ui.js 建立数据字段和ui组件属性之间的映射关系

var root = ui("$");
;// $是这个ui文件根节点组件的通配符,如果指定组件的id,也可以用id来获取对象

root.setMapping({
        "photo_imageview.source" : "photo",
        "name_label.text" : "name",
        "price_label.text" : "price",
        "checkbox.source" : "checked",
        "count_label.text" : "count",
        "count_label.tag" : "index"// 利用一个组件的tag属性来记录当前cell的索引
});

* 从cell.ui传递数据到index.ui:通过共享的Page对象来订阅和触发消息。cell.ui上增加货物的数量和勾选某款货物都会触发消息通知index.ui去更新数listdata数据,从而达到数据的同步,否则listview上下滑动重用的时候cell又会恢复旧的状态,关于这点可以参考文档

//index.ui.js 订阅myorder消息,定义回调函数,接受到数据后更新listdata和相应的ui

// 自定义一个myorder事件,接受从cell传递过来的数据
page.on("myorder", function(d) {
        // 更新第index行的数据
        var cell_data = listdata.getOne(d.index);
        cell_data.checked = d.checked;
        cell_data.count = d.count;
        // 再更新listdata
        listdata.updateOne(d.index, cell_data);
        // 重新计算合计和结算数量
        compute();
})

//cell.ui.js 触发myorder消息,把修改过的数据返回给index.ui

checkedLayout.on("touch", function() {
        if (checkedImage.source==deviceone.checked) {
                checkedImage.source = deviceone.unchecked;
        } else {
                checkedImage.source = deviceone.checked;
        }
        fireMyorder();
})

plus.on("touch", function() {
        var c = count.text;
        count.text = (c * 1) + 1;
        fireMyorder();
});
subtract.on("touch", function() {
        var c = count.text;
        c = c - 1;
        if (c < 0)
                c = 0
        count.text = c;
        fireMyorder();
});

function fireMyorder() {
        var d = {
                "index" : count.tag,
                "count" : count.text,
                "checked" : checkedImage.source
        };
        page.fire("myorder", d);
}
时间: 2024-07-29 09:04:26

购物车的简单示例的相关文章

[deviceone开发]-购物车的简单示例

一.简介 主要是演示listview所在的ui和模板cell所在的ui之间数据的交互,点击一行,可以通过加减数量,自动把所有选中的汽车价格显示在底部. 二.效果图 三.示例地址: http://source.deviceone.net/source-detail.html?downloadCount=0&projectId=39d9f19c7172e9f962930c7ca2d42678 四.源码地址: https://github.com/do-project/code4do/tree/mas

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

【转】bind简单示例

bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename T, typename Arg> class simple_bind_t { private: typedef R (T::*F)(Arg); F f_; T* t_; Arg& a_; public: simple_bind_t(F f, T* t, Arg &a) : f_(f),

SQL左连接、右连接和内连接的简单示例

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录: right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连接) 只返回两个表中联结字段相等的行:举例如下: -------------------------------------------- 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录

Backbone简单示例

要的资源: <script type="text/javascript" src="../dep/underscore-1.6.0.min.js"></script> <script type="text/javascript" src="../dep/jquery-1.11.1.min.js"></script> <script type="text/javas

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤: 一,启动VS 2010开发环境,选择菜单中的"文件",选择其中的"新建",再选择"网站",会弹出"新建网站"对话框. 二,在"新建网站"的对话框,在"已安装模板"中选择Visual C#,右侧的选择"ASP.NET网站"选项,单击"新建网 站"中的"文件系统",下拉菜单中有"文件系统&qu