二、敏捷開發框架-編輯頁面模型-EditPage

来源:https://www.cnblogs.com/godmodel/archive/2020/06/02/13029084.html
-Advertisement-
Play Games

敏捷開發框架:編輯頁面模型 編輯頁面的開發: 下麵以用戶管理為例子,進行分析 如上圖,就是我們典型的編輯畫面 特點是:上面一排功能按鈕 中間是:表單 主要實現數據的編輯、載入、查看、保存、新增 等功能 頁面DOM結構如下: 從上到下依次看 eci-page-edit 表示當前頁面是編輯頁面 head ...


敏捷開發框架:編輯頁面模型 

 

編輯頁面的開發:

下麵以用戶管理為例子,進行分析

image.png

如上圖,就是我們典型的編輯畫面

特點是:上面一排功能按鈕

中間是:表單

主要實現數據的編輯、載入、查看、保存、新增 等功能

 

頁面DOM結構如下:

image.png

從上到下依次看

eci-page-edit 表示當前頁面是編輯頁面

head 頭部 主要放功能按鈕,class是 toolbar 如果想要背景為灰色 就增加 eci-gray-bg

eci-edit-area 編輯區  採用編輯區 自適應窗體高度設計  class 加 fit

footer 底部,用來顯示操作頁面的提示信息

 

編輯的畫面功能包括

編輯數據載入

保存

新增

 

代碼如何開發:

image.png

    使用 EditPage初始化當前編輯頁面

    同查詢頁面一樣重要的是 keyField 主鍵

    這裡只要設置 

    loadApi  用來查詢當前編輯的數據顯示在表單上

    saveApi 用來保存

 

   page.tryLoad( )方法  對應的 EditPage類裡面 提供了 load方法

   load方法的含義是  根據keyValue查詢數據

   tryLoad 主要是考慮,我們新增畫面和編輯畫面是同一個畫面

   這裡調用 tryLoad 裡面會自動識別當前打開畫面是新增還是編輯

   如果是新增就不調用任何後臺,如果是編輯,則自動從URL地址中獲取當前頁面的主鍵值

   載入到EditPage 的 keyValue中,同時記錄到頁面的主鍵DOM中。

   

   通過上述兩行代碼就實現 編輯頁面的所有功能了。

   

   編輯數據載入

   保存     預設ID btnSave  也可以指定  saveId

   新增     預設ID btnAdd   也可以指定 addId

 

image.png

點擊保存,效果如上圖。

一般情況下不需要些任何代碼。

用戶編輯畫面的場景,有點特殊,在新增的時候,那能夠選擇員工,當變成修改的時候,控制員工放大鏡不能選擇

image.png

上圖演示的是新增時,人員放大鏡可以選擇。

保存後,放大鏡不能選擇了,這要怎麼做。

按照正常這不應該是個問題,保存後控制下唄。在這裡的確是個問題了。

為啥,因為我沒有寫任何代碼就實現了保存,那我們如何應對上面提到的這個問題呢。

 

image.png

   如上圖:提供saved回調函數,接管了 保存後的處理邏輯

   但是同時保留了 預設回調函數的 消息提示功能。

   這樣的設計是為了各司其職,通力協作。

   本能造成下麵的困擾:

   預設回調函數內置了 保存成功後的消息提示,這樣業務代碼就免得寫了。

 

  但是在特殊情況下,業務代碼需實現自己的回調函數,自己實現回調函數的目的是要加入自己的業務邏輯

  比如上例的,我們要控制 某個控制項的只讀屬性,但是我要是需要框架幫忙保存,消息提示功能

  不至於我為了實現另外一個功能,迫不得已增加另外一個段代碼實現已經有的功能,這就是副作用。

  

  好的,框架盡最大的可能實現你的需要,讓你部分接管回調處理過程。

  你負責處理你的,處理完了,流程繼續交給框架來做,這時候框架幫你實現消息的彈出提示功能。

  OK,達成協議。就這麼乾。

 

  事實上上述的設計不夠完善。

  只是考慮到了絕大數的情況,是要求消息提示由框架來做的情況。

  那思考下,有沒有一種情況下,業務代碼希望全權接管回調處理過程,不要框架幫我做消息提示的情況呢。

  答案是 肯定會有,那種情況下怎麼辦呢。

  上代碼:

image.png

  通過設置 response.cancel=true 來取消框架的代碼執行,滿足極少部分特殊情況的靈活性。

 

 

好的,保存功能我們實現了

image.png

接下來我們來實現新增功能的代碼

預設已經實現了,只要是你的 按鈕ID 是 btnAdd 就可以了。

 

EditPage頁面內置了 add 方法

下麵說說特別的情況:

image.png

如上圖,這裡的新增 btnAdd 我們給這個按鈕增加了事件 addAction

雖然,按鈕ID 還是叫 btnAdd  因為你給它加了事件,那麼框架就不管了,全權交給你了

你為什麼要這麼做呢,肯定是有原因的。

例如:我的原因

是想在 新增的時候又將 員工放大鏡設置成 可選擇的模式。(框架的代碼可管不了這麼個性的需求

只能管標準的、統一的處理方式,新增,就全部設置成空)

 

image.png

那好因為有特殊的需要,所以需要業務代碼來接管處理過程。

框架將add方法包裝成獨立的方法,這個時候在自己的業務代碼中依然可以調用 add方法實現基本功能

+自己的代碼塊,通過這樣的方式來協同。

是不是靈活有方便。

 

至此新增的功能我們就完成了。

沒有特殊情況一行代碼都不要,只要ID 命名成 btnAdd 即可

面對特殊的要求時,代碼也非常簡便

 

繼續:實現後面的功能

image.png

回顧一下,QueryPage頁面的開發介紹

這個功能是不是一樣,只是在不同的畫面上,不同的表現形式

一個是編輯畫面,一個是列表行內事件

image.png

 

 

在編輯畫面上,我們將查詢頁面的這兩行代碼拷貝過來

image.png

image.png

一樣的代碼,不做任何修改,功能完全沒有問題

明明是不一樣類型的畫面,最起碼,如何取參數都應該是不一樣的吧。

這就是 EciAction動作模型的強大之處。

 

如上功能是沒有任何問題,但是總感覺這個界面比較小,不利於操作。

因為本身用戶編輯視窗是彈出的小視窗,那麼在內部彈出肯定不好看。

怎麼辦?在父窗體中彈出

代碼怎麼寫

image.png

 

點擊試試:

image.png

同樣標題也出來了。

 

這個窗體是怎麼彈出的呢

請求者是編輯畫面     在列表頁中通過 eci.open layer彈出     目標頁面  UserRole畫面

這裡涉及   調用者、執行者、目標窗體   三者這間的關係

關於三者之間的信息交互 後面會專題介紹  《ECI彈窗交互設計》

先記住有這個三個概念,便於後續交流。

 

 

最後介紹下

頁面結構中的 footer 的作用是啥

image.png

 如下圖:我們放置的是 tipContent 內容塊  

 提示內容

 

 

image.png

 

開發人員怎麼寫:

image.png

如上圖,只要在 控制項上 加  data-tip屬性即可,怎麼動態顯示到 狀態欄上的,由框架統籌控制!

 

 

 

 

========================================================================

至此 EditPage 畫面在用戶編輯的使用 介紹就到此

其實其它對象的保存,都是一樣的。

 

下麵截圖看下,角色編輯畫面的代碼,對比下

首先視圖

image.png

頁面初始化:

image.png

打開這個編輯頁面,如果是新增的時候,將所有依賴 主鍵的按鈕例如  複製、複製許可權,設置用戶等按鈕 失效

page.saved 回調函數,控制當頁面保存成功後,將 相關按鈕 啟用。

 

image.png

下麵兩行是實現【分配許可權】、【設置用戶】的代碼

image.png

大部分的行為代碼實現 控制在一行上,兌現了 EciAction 的設計目標(儘量通過最少的代碼把功能實現)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系列文章 基於 abp vNext 和 .NET Core 開發博客項目 - 使用 abp cli 搭建項目 基於 abp vNext 和 .NET Core 開發博客項目 - 給項目瘦身,讓它跑起來 基於 abp vNext 和 .NET Core 開發博客項目 - 完善與美化,Swagger登場 ...
  • 很多情況下,我們需要用到Tab 選項卡的情況 例如下麵 註冊審批頁面 這個場景是,註冊審批,包含兩部分,一個是對註冊組織機構的審批,一個是註冊用戶的審批那麼這個需要用個Tab選項卡來實現比較合適,而不是弄兩個功能菜單 那這個頁面怎麼實現呢。 關於Tab的使用,我們有兩種模式。 第一種模式:Tab只是 ...
  • serilog .net core 3.1 配置方式 安裝包dotnet add package Serilog dotnet add package Serilog.AspNetCore 早初始化模式 public class Program { public static IConfigurat ...
  • 1、給定一個int數組,編寫方法以統計所有偶數的值。 有很多方法可以做到這一點,但是最直接的兩種方法是: static long TotalAllEvenNumbers(int[] intArray) { return intArray.Where(i => i % 2 == 0).Sum(i => ...
  • 通過前面的學習我們應該熟練掌握了 QueryPage 查詢頁面模型 EditPage 編輯頁面模型 同時也掌握了,並不是一個頁面就只能是一個模型,可以是組合使用的情況 可以是 查詢+編輯的組合 也開是 查詢+查詢的組合 難道我們只有這兩種頁面模型嗎? 今天我們一起來學習我們開發中遇到的第三種頁面模型 ...
  • 敏捷開發框架初識組件式開發 可能這個叫法一定非常準確,但是的確實現了組件式的開發 那好吧,姑且就這麼叫吧 下麵講講這個頁面的由來: 首先我們提供了一個功能檢索的頁面,用於查詢所有的功能菜單 這個頁面的實現,QueryPage 太拿手了 查詢列表的所有功能全部搞定 點擊【編輯】或者雙擊進入編輯畫面 這 ...
  • 在複雜的頁面看看清問題的本質: 下麵的頁面,我說其實一部分是編輯頁面 好吧,我們一起來找到這個編輯頁面 我們通過實例來進一步分析 這個頁面是,用戶列表或者用戶編輯畫中點擊用戶【設置角色】彈出來的功能頁面 左側是待選擇的角色信息,右側是已經分配給 用戶的 角色信息 界面效果如下: 前面我們瞭解了兩個非 ...
  • 我們再次來一起研究下 QueryPage 查詢頁面模型 一般情況下我們遇到的比較多的,查詢模型就形如下圖的 查詢條件+查詢表格+分頁 的組合 圖一 下麵我們看下圖 圖二 我們先來找不同,非常明顯,就是一個是表格,一個是圖表 總的來講就是完全不同的內容 接著我們來找相同,都有一個查詢按鈕、都有清空 都 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...