首页 > 其他分享 >动手实现基于 JSON 和 OData 两种数据模型的 Web 应用表格控件行项目的添加和删除

动手实现基于 JSON 和 OData 两种数据模型的 Web 应用表格控件行项目的添加和删除

时间:2023-12-09 13:13:05浏览次数:48  
标签:控件 表格 Web OData JSON 模型 数据模型 客户端

文章标题描述的需求是笔者在工作和网络上经常收到的前端开发领域的咨询话题之一。Web 应用的表格控件,在切换到编辑模式下之后,给用户提供了行项目的添加和删除功能。基于 MVC 和 MVVM 框架的前端控件,都离不开 Model 即数据模型层。

笔者工作中使用最多的模型层实现技术,即 JSON 模型和 OData 模型。因此本文就来分享这两套笔者最熟悉的数据模型下的表格行项目添加和删除实现,基于的前端开发框架是 UI5.

首先了解这两个模型的区别。

UI5 官网对 JSON 模型的定义:

The JSON model is a client-side model and, therefore, intended for small data sets, which are completely available on the client. The JSON model does not support mechanisms for server-based paging or loading of deltas. It supports, however, two-way binding. Also, client-side models like the JSON model have no built-in support for sending data back to the server. The apps have to use, for example, model.getData() and jQuery.ajax() to send updated data to the server.

JSON 模型是客户端模型,因此适用于在客户端完全可用的小规模数据集。JSON 模型不支持基于服务器实现的分页或增量加载机制。同 OData 模型不同,JSON 模型没有原生支持的将数据发送回服务器的功能。应用开发人员必须手动调用 model.getData()jQuery.ajax() 将客户端更新的数据发送回服务器。

UI5 官网对 OData 模型的定义:

The OData model is a server-side model, meaning that the data set is only available on the server and the client only knows the currently visible (requested) data. Operations, such as sorting and filtering, are done on the server. The client sends a request to the server and shows the returned data.

OData 模型属于服务器端模型。在 Web 开发中,Server-Side Model 是指在服务器端进行数据处理和运算的模型。这种模型的主要优点是可以处理大量数据,同时也可以利用服务器的强大计算能力。

Server-Side Model 中,服务器接收到客户端的请求后,会进行一系列的处理,如查询数据库、执行算法等,然后将处理结果返回给客户端。这种处理方式相对于在客户端执行处理(例如,使用 JavaScript 在浏览器中执行处理)有很多优点。其中最主要的优点是,服务器端的计算能力通常远超客户端,可以处理更复杂的任务和更大的数据量。此外,由于所有的处理都在服务器端完成,敏感的数据和算法不会被发送到客户端,从而降低了数据被窃取或篡改的风险。

所以如果一个 Web 应用选择服务器端数据模型,就意味着完整的数据集仅保存在服务器上,客户端只能感知到当前请求的数据。排序和过滤等操作都是在服务器上完成的。客户端向服务器发送请求并显示返回的数据。

OData 模型支持增量加载机制(或称 Lazy Loading,延迟加载,懒加载)。

首先来学习在基于 OData 模型的 SAP UI5 表格控件里如何实现行项目的增添和删除需求。

这个例子的全部源代码,在我的 Github 上。

将整个代码仓库克隆到本地,执行命令行 npm install, 然后执行 node local.js:

然后浏览器访问 http://localhost:3002/tabledelete/ 即可:

上图的表格控件,绑定到了 OData 服务 Products entitySet 包含的两个字段:Name 和 Size.

在 Table 控制器的 onInit 方法里,我使用 ODataModel 的构造器,创建了一个 OData 模型实例,将其通过 setModel 方法赋给表格实例 oTable. 模型构造器需要传入一个 OData 服务的路径,这里我传入的路径 /here/goes/your/serviceUrl, 指向的是我本地 MockServer 提供的虚拟 OData 服务。

表格控件行项目的添加和删除,直接调用 OData 服务对应的 create 和 remove 方法即可,如下图高亮代码行所示。

OData 模型的 create 和 remove 方法调用后,会发送对应的 HTTP 请求到对应的服务器。注意,在添加和删除行项目的事件处理代码里,我们并未手动编写表格控件的刷新操作,因为 OData 模型是一个服务器端模型,当我们调用 OData 模型的 create 和 remove 方法执行完毕之后,OData 模型会自动发起另一个 read 请求,从服务器端获取最新的数据,并自动刷新表格控件。

下面再实现基于 JSON 模型的表格控件行项目的添加和删除。

本例的完整源代码我放在了我的 Github上。

新建 JSON 模型实例,并绑定到表格控件实例的代码如下图所示。其中 this.data.Products 数组变量,维护的是该 JSON 模型硬编码的全部本地数据:

用户在界面点击按钮试图添加和删除行项目,我们需要做的操作是修改 JSON 模型绑定的 Products 数组,然后调用 JSON 模型的 refresh 方法,手动触发 UI 的刷新。刷新模型数据之后,通过 JSON 模型的双向绑定机制,就能自动实现 UI 界面的同步刷新。

总结

从以上 JSON 模型的实现可以看出,该表格显示的全部数据,均位于客户端维护的 this.data.Products 数组里。正如 SAP UI5 官网所言,JSON 模型只适合数据量较小的表格内容展示。如果表格的数据源来自 SAP 系统后台,采用 JSON 模型实现的表格应用,将会遇到可扩展性(scalability) 问题。在这种情形下,OData 模型是更好的选择。

标签:控件,表格,Web,OData,JSON,模型,数据模型,客户端
From: https://www.cnblogs.com/sap-jerry/p/17890798.html

相关文章

  • 什么是 Web 开发的 Server Side Model
    在Web开发中,"Server-SideModel"是指在服务器端进行数据处理和运算的模型。这种模型的主要优点是可以处理大量数据,同时也可以利用服务器的强大计算能力。与客户端模型(如JavaScript中的MVC模型)相比,服务器端模型可以更好地保护数据和算法,因为它们不会被发送到客户端。在"Se......
  • 快速区分webGL,webGPU,unity3D和UE4
    在3D图形渲染的渲染领域,很多友友们对上述概念傻傻分不清,站在前端开发角度,我用简单语言说下,结论在文章最后。一、四者都能进行3D图形渲染它们之间有一些区别,下面我将对它们进行简单的区分:   WebGPU:WebGPU是一种Web图形API,是基于底层的GPU硬件架构设计的,可以更好地利......
  • Windows系统webp图片预览插件
    Windows系统webp图片预览插件、下载插件并安装软件名称:WebPCodecforWindows(WindowsWebP编解码组件)最新版本:0.19.9(29Jan2020)评可证:Freeware系统要求:WindowsXP/Vista/7/8/10下载地址:WebpCodecSetup.exe(4.9MB)、WebPPhotoshopplug-in(516KB) ......
  • tesseract.js 又一个基于webassembly 的tesseract ocr 包装
    tesseract.js是基于webassembly的jstesseract实现,可以在web以及node中运行,我以前简单介绍过一个基于webassembly的工具tesseract-wasm的实现相对简单(包括构建),当然技术上都是基于了emscripten进行的构建,tesseract.js包装了tesseract.js-core功能相比tesseract-wasm丰富......
  • .net 温故知新【15】:Asp.Net Core WebAPI 配置
    关于Asp.NetCore中的配置实际之前我已经整理过.net中以json方式进行配置的介绍(.net温故知新:【8】.NET中的配置从xml转向json),当时我们说Asp.NetCore也是按照基础方法,只是组织形式的问题,有个封装过程。所以我这里就着重介绍一下Asp.NetCore中配置的重点。1、主机配置和应用程......
  • JetBrains WebStorm 2023.3 (macOS, Linux, Windows) - 最智能的 JavaScript IDE
    JetBrainsWebStorm2023.3(macOS,Linux,Windows)-最智能的JavaScriptIDE请访问原文链接:https://sysin.org/blog/jb-webstorm-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsWebStorm-最智能的JavaScriptIDEWebStorm是一个适用于JavaSc......
  • 实验四 Web服务器2
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#definePORT8080#defineMAXLINE1024voidhandle_client(int......
  • 实验四 Web服务器2
    一、任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:Web服务器的客户端服务器,提交程序运行截图实现GET即可,请求,响应要符合HTTP协议规范服务器部署到华为云服务器,浏览器用本机的把服务器部署到试验箱。(加分项)二、实验过程1.运行截图:......
  • 2023-2024-1 20211327 实验四 Web服务器2
    实验四Web服务器2Web服务器的客户端服务器web_server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#definePORT8080#defineBUFFER_SIZE1024voidhandle_client(intclient_socket){......
  • 浅谈WPF之控件拖拽与拖动
    使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?今天就以一个简单的小例子,简述如何在WPF中实现控件的拖拽和拖......