几乎所有Web应用程序都要和服务器端交换数据,交换数据时最方便的就是使用JSON格式。Knockout可以实现很复杂的客户端交互,对于前后端交互使用的技术最为基本且常用的是Ajax,本次利用Ajax和ko的双向绑定完成一些简单的功能,可以快速展示出ko的方便之处。

  代码地址: https://gitee.com/530521314/Partner.TreasureChest.git

一、服务端返回数据绑定到客户端

  1、准备好一些初始数据,直接通过View方法将视图实体返回到视图文件中。

  

  2、前端设置为强类型,初始化ko并从Model中获取数据并加载到ko对象中,同时完成了页面渲染。(注意暂时未使用Mapping插件)

  

  3、效果实现图

  

二、客户端通过Get请求服务端数据

  1、通过前端请求,完成将服务端数据加载到当前页面中,使用$.get方法或是$.getjson方法或是$.ajax方法都行,本次直接使用$.get方法,当获取服务端数据成功后,清除界面上的已有数据,并将新数据循环绑定到viewModel中

  

  2、服务端编写简单的方法,在原来基础数据的基础上增加一条新数据,并将数据打包成Json格式,注意将获取成功与否的操作结果返回

  

  3、效果实现图

  

三、客户端POST提交数据到服务端(手动绑定)

  前端数据提交到后端的方式可以有简单的get提交,提交几个参数跟在url后面,用于查询相关信息,也有使用post提交表单数据或是json或xml格式的数据,本次只使用一下post提交json数据

  1、post提交单条数据,将单条数据转换为json格式,使用ko提供的直接将viewModel中的集合转换成json格式的数据,该过程也可以使用其它方式完成,并非完全依赖ko

  

  2、服务端指定接收参数,完成相应操作返回结果,注意使用了FromBody特性,只允许最多一个参数,如果有多余参数要使用,则将参数打包成一个新的类,大多使用dto

  

  3、前端提交整个集合到后台,先将集合打包成Json格式,然后使用ajax完成提交,操作过程中,由于集合是存在于observableArray的监控数组中,不能直接序列化,因此需要使用其它方式进行转换

  

  4、在服务端使用List<>来接收,通过asp.net core提供的模型绑定,将前端请求中的json数据完成绑定到List集合中

  

  5、效果实现图

  

四、客户端POST提交数据到服务端(自动绑定)

  对于之前的一些操作,有些操作可以使用ko提供的插件直接帮助我们完成绑定工作,而无需进行大量属性的绑定工作和处理复杂的嵌套结构,如同在后端的AutoMapper工具,在ko中有一个ko.mapping插件,可以很大程度上提高我们的开发效率。

  mapping插件使得JavaScript简单对象(或JSON结构)转换成Observable的view model,这样一来,无需在前端声明一些view Model类了。

  1、从后台返回的List集合通过mapping插件绑定到前端viewModel实例属性中

  

  2、获取服务端的List集合绑定到前端页面中,使用ko插件直接绑定

  

  注意:在使用asp.net core时,服务端返回的json格式为驼峰式,当在上一步操作中,初始化时为首字母大写使用的是帕斯卡命名方式,并且在页面元素中也是使用首字母大写的形式,因此需要改变服务端默认的驼峰式规则。

  在StartUp中,修改mvc的默认规则,使用Newtonsoft提供的转换方式,这样一来,前后端交互,前端绑定,传递到后端都是使用帕斯卡命名规则,对于前端来讲最好是使用驼峰式,同样也可以做相应的改变,比如对服务端视图模型属性中使用JsonProperty特性。

  

  3、POST提交前端数组并序列化后到服务端中,后端控制器中并无修改,只在前端相应变化即可

  

 至此,已完成了knockoutJS前后端交互的方式,对于其它表单提交等等,都比较简单,最后,祝大家新年快乐!。

 欢迎关注微信订阅号,有新的文章将同步到订阅号中

 

2019-01-02,望技术有成后能回来看见自己的脚步

KnockoutJS-与服务端交互的更多相关文章

  1. Android客户端与服务端交互之登陆示例

    Android客户端与服务端交互之登陆示例 今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台 ...

  2. java客户端与服务端交互通用处理 框架解析

    一.综述 java 客户端与服务端交互过程中,采用NIO通讯是异步的,客户端基本采用同一处理范式,来进行同异步的调用处理. 处理模型有以下几个要素: 1. NIO发送消息后返回的Future 2. 每 ...

  3. IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践

    说到ios的应用开发,我们不能不提到web server服务端,如果没有服务端的支持,ios应用开发就没有多大意义了,因为从事过手机开发的朋友都知道(Android也一样),大量复杂业务的处理和数据库 ...

  4. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  5. Android客户端与PHP服务端交互(一)---框架概述

    背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事 ...

  6. Fresco 源码分析(二) Fresco客户端与服务端交互(3) 前后台打通

    4.2.1.2.4 PipelineDraweeControllerBuilder.obtainController()源码分析 续 上节中我们提到两个核心的步骤 obtainDataSourceSu ...

  7. Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题

    4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...

  8. cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

    转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom ...

  9. UDP网络程序,客户端和服务端交互原理

    创建一个udp客户端程序的流程是简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实 ...

随机推荐

  1. Bootstrap在线引用css和js

    百度在线调用 <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></ ...

  2. Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析

    1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...

  3. 0513JS数组的定义、遍历、添加

    |数组|-定义方式|--1.new Array();|----空数组|------var attr = new Array();|------lenght:0|------_proto_: Array ...

  4. java 一维数组

    数组的概念?有什么特点? 数组是指一组数据的集合,数组中的每个数据被称作元素.在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致. 一维数组的定义格式? 数据类型[]   名称  = ...

  5. Java 开发环境配置

    window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloa ...

  6. 基于Kafka Connect框架DataPipeline可以更好地解决哪些企业数据集成难题?

    DataPipeline已经完成了很多优化和提升工作,可以很好地解决当前企业数据集成面临的很多核心难题. 1. 任务的独立性与全局性. 从Kafka设计之初,就遵从从源端到目的的解耦性.下游可以有很多 ...

  7. MyBatis xml配置文件详解

    http://blog.csdn.net/fenghuibian/article/details/52525671

  8. Ajax跨域之ContentType为application/json请求失败的问题

    项目里的接口都是用springmvc写的,其中在@requestmapping接口中定义了consumes="application/json",也就是该接口只接受ContentT ...

  9. java通过反射获取字段的类型

    import java.lang.reflect.Field;  //这是需要引入的包 Field[] f = 类名.class.getDeclaredFields(); //获取该类的字段for(F ...

  10. 在Mac OS X中配置Apache + PHP + MySQL 很详细

    这是一篇超级详细的配置mac os下面php+mysql+apache的文章.非常详细我的大部分配置就是参考上面的内容的,比如,PHP不能连接数据库,就是改一下默认的php.ini中pdo_mysql ...