MVVM架构~knockoutjs实现简单的购物车

简介:

概念相关

购物车相信大家都用过,很方便,可以将多个商品添加到购物车,并且可以修改购买商品的数据,当然为了用户体验好,在修改数据时,你的价格也会出现变化的,这使用JS可以实现,但我认为,代码量挺大的,而使用knockoutjs可以大大减少代码量,而且更重要的是,当前台页面有所调整时,这个JS只需要简单调整,而不需要改后台代码!

代码相关

下面看一下实现简单购物车的代码

1 View部分

 <table>
        <thead>
            <tr>
                <th>商品</th>
                <th>单价</th>
                <th>数量</th>
                <th>小计</th>
                <th></th>
            </tr>
        </thead>
        <tbody data-bind="foreach:lines">
            <tr>
                <td data-bind="with:product">
                    <span data-bind="text:name"></span></td>
                <td data-bind="with:product"><span data-bind='text:formatCurrency(price)' /></td>
                <td>
                    <input data-bind='visible: product, value: productCount, valueUpdate: "afterkeydown"' />
                </td>
                <td><span data-bind="visible:product,text:formatCurrency(subtotal())"></span></td>
                <td><a href='#' data-bind='click: $parent.removeLine'>Remove</a></td>
            </tr>
        </tbody>
    </table>
    <p class='grandTotal'>
        Total value: <span data-bind='text: grandTotal()'></span>
    </p>
    <button data-bind='click: addLine'>Add product</button>

2 JS部分

 <script type="text/ecmascript">
        function formatCurrency(value) {
            return "¥" + value;
        }
        var Product = function (id, name, price) {
            self = this;
            self.id = id;
            self.name = name;
            self.price = price;
        }
        var CartItem = function (product) {
            self = this;

            self.product = ko.observable(product);
            self.productCount = ko.observable(1);

            self.subtotal = ko.dependentObservable(function () {
                return this.product() ? this.product().price * parseInt("0" + this.productCount(), 10) : 0;
            }.bind(self));
        };
        var CartList = function () {
            var self = this;
            self.lines = ko.observableArray([new CartItem(new Product(1, "test1", 100))]);

            self.addLine = function () { self.lines.push(new CartItem(new Product(2, "test2", 200))) };

            self.removeLine = function (line) { self.lines.remove(line) };

            self.grandTotal = ko.computed(function () {
                var total = 0;
                $.each(self.lines(), function () { total += this.subtotal(); })
                return total;
            });
        };
        ko.applyBindings(new CartList());

    </script>

3 有图有真相

 完成代码如下

  View Code

感谢您的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVVM架构~knockoutjs实现简单的购物车,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
设计模式 存储 前端开发
MVVM、MVC、MVP三种常见软件架构设计模式的区别
MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
92 12
|
4月前
|
前端开发
什么是MVVM架构?
MVVM是Model-View-ViewModel的简写。它本质上就是MVC的改进版。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面 (UI) 清晰分离。 保持应用程序逻辑和UI之间的清晰分离有助于解决许多开发问题,并使应用程序更易于测试、维护和演变。 它还可以显著提高代码重用机会,并允许开发人员和UI设计人员在开发应用各自的部分时更轻松地进行协作。
61 2
|
19天前
|
前端开发 开发者 C#
WPF开发者必读:MVVM模式实战,轻松实现现代桌面应用架构,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离应用程序的逻辑和界面,提高了代码的可维护性和可扩展性。本文介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定和逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种方式,开发者可以构建更加高效和可扩展的桌面应用程序。
43 0
|
3月前
|
前端开发 测试技术 API
探索安卓应用的架构演进:从MVC到MVVM
本篇文章将深入探讨安卓应用开发中的架构演进,特别关注从传统的MVC(Model-View-Controller)到现代流行的MVVM(Model-View-ViewModel)架构的转变。通过对比两种架构的设计理念、实现方式和实际应用案例,解析MVVM在提高代码可维护性和可测试性方面的优势。
48 0
|
4月前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
4月前
|
前端开发
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
49 1
|
4月前
|
前端开发 中间件 程序员
app的组件化之路:业务组件化与中间件,MVVM架构的作用
app的组件化之路:业务组件化与中间件,MVVM架构的作用
54 0
|
22天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
7天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
17 3
|
11天前
|
监控 负载均衡 应用服务中间件
探索微服务架构下的API网关设计与实践
在数字化浪潮中,微服务架构以其灵活性和可扩展性成为企业IT架构的宠儿。本文将深入浅出地介绍微服务架构下API网关的关键作用,探讨其设计原则与实践要点,旨在帮助读者更好地理解和应用API网关,优化微服务间的通信效率和安全性,实现服务的高可用性和伸缩性。
30 3

热门文章

最新文章