Kendo UI 中,ViewModel、DataSource 和 Grid的關系。Kendo 框架發起 HTTP 請求

Kendo UI 中,ViewModel、DataSource 和 Grid的關系

在 Kendo UI 中,ViewModelDataSourceGrid 是構建動態數據應用的核心組件,三者協同工作實現數據的綁定、管理和展示。


一、三者關系圖解

綁定數據
提供結構化數據
交互操作觸發
通知更新
ViewModel
DataSource
Grid
  • ViewModel:數據管理層,使用 kendo.observable 創建響應式對象,監聽數據變化。
  • DataSource:數據管道,負責數據的獲取、排序、分頁、過濾等操作,支持本地/遠程數據。
  • Grid:數據展示層,依賴 DataSource 提供數據渲染表格,支持編輯、排序等功能。

二、基礎使用步驟

  1. 創建 ViewModel

    var viewModel = kendo.observable({users: [ // 數據集合 { id: 1, name: "John", age: 30 },{ id: 2, name: "Jane", age: 25 }],selectedUser: null // 響應式屬性 
    });
    kendo.bind($("#app"), viewModel); // 綁定到DOM 
    
    • 通過 kendo.bind 將 ViewModel 與 HTML 元素關聯,實現雙向綁定。
  2. 配置 DataSource

    var dataSource = new kendo.data.DataSource({data: viewModel.users, // 綁定 ViewModel 數據schema: {model: { id: "id", fields: { name: "string", age: "number" } } // 定義數據結構 },pageSize: 5, // 分頁 sort: { field: "age", dir: "asc" } // 排序
    });
    
    • 支持遠程數據:設置 transport 屬性指定 API 地址。
  3. 初始化 Grid 并綁定 DataSource

    $("#grid").kendoGrid({dataSource: dataSource, // 指定數據源 columns: [{ field: "name", title: "姓名" },{ field: "age", title: "年齡" },{ command: ["edit", "destroy"] } // 內置編輯按鈕 ],editable: "popup", // 編輯模式 pageable: true // 啟用分頁 
    });
    
    • 關鍵配置:
      • columns 定義列信息,field 需與 DataSource 字段一致。
      • editable 啟用行內編輯(默認需配置 DataSource 的 CRUD 方法)。

三、進階交互場景

  1. 動態更新數據

    // 添加新數據
    viewModel.users.push({ id: 3, name: "Tom", age: 28 });
    dataSource.read(); // 刷新 DataSource
    $("#grid").data("kendoGrid").refresh(); // 更新 Grid 視圖
    
    • 修改 ViewModel 后需手動觸發 read()refresh() 同步。
  2. 響應 Grid 事件

    $("#grid").kendoGrid({dataBound: function(e) {// 數據渲染完成后執行console.log("當前數據量:", e.sender.dataSource.total());},edit: function(e) {// 編輯行時獲取數據 console.log("編輯的行數據:", e.model.toJSON());}
    });
    
    • dataBound 用于自適應列寬、數據校驗等。
  3. 服務端分頁/過濾

    var remoteDataSource = new kendo.data.DataSource({transport: {read: {url: "/api/users",dataType: "json"}},serverPaging: true, // 啟用服務端分頁 serverFiltering: true // 啟用服務端過濾
    });
    
    • 需后端配合處理 pagepageSizefilter 參數。

四、常見問題解決

  1. 數據變更后 Grid 未更新

    • 確保調用 dataSource.read()grid.refresh()
  2. 自定義編輯列(如 DropDownList)

    • columns.template 中定義編輯控件,在 dataBound 中初始化組件。
  3. 獲取 Grid 全部數據

    var allData = $("#grid").data("kendoGrid").dataSource.data();
    

Kendo 框架發起 HTTP 請求

一、核心機制:DataSource 的 transport 配置
Kendo 框架通過 DataSource 組件管理數據請求,其核心是 transport 屬性配置。該屬性定義了與后端交互的 HTTP 方法(GET/POST/PUT/DELETE),并支持異步操作。

二、發起請求的步驟

  1. 配置 DataSource
var dataSource = new kendo.data.DataSource({transport: {read: { // GET 請求示例 url: "/api/data",type: "GET",dataType: "json"},update: { // POST/PUT 請求示例 url: "/api/update",type: "POST",contentType: "application/json",data: function (item) {return JSON.stringify(item); // 序列化數據 }}},schema: { model: { id: "id" } }, // 定義主鍵 batch: true // 批量模式(可選)
});
  1. 手動觸發請求
  • 讀取數據:
    dataSource.read(); // 觸發 transport.read 配置的 GET 請求 
    
  • 提交變更:
    dataSource.sync(); // 自動根據數據狀態(新增/修改/刪除)觸發對應 transport 方法 
    
  1. 處理響應與錯誤
dataSource.bind("requestEnd", function(e) {if (e.type === "read") {console.log("數據加載完成:", e.response);} else if (e.type === "update") {console.log("數據更新成功:", e.response);}
});dataSource.bind("error", function(e) {console.error("請求失敗:", e.xhr.status, e.errorThrown);
});

三、不同類型請求的配置

請求類型適用場景配置要點
GET數據查詢使用 transport.read,參數通過 data 函數動態附加到 URL
POST數據提交/創建新記錄設置 type: "POST",通過 data 處理請求體格式(如 JSON)
PUT更新已有數據類似 POST,但需指定 type: "PUT"
DELETE刪除數據配置 transport.destroy,通常傳遞主鍵參數

四、高級用法

  1. 自定義請求頭:
    transport: {read: {url: "/api/data",headers: { "Authorization": "Bearer " + token } // 添加認證頭}
    }
    
  2. 動態參數處理:
    data: function(options) {return { page: dataSource.page(), size: dataSource.pageSize() }; // 分頁參數 
    }
    
  3. 文件上傳:
    • 需結合 <input type="file"> 和 FormData 處理(類似通用 HTTP 文件上傳邏輯)。

五、常見問題排查

  • 403 禁止訪問:
    • 檢查接口權限配置(如 CORS、Token 有效性)。
    • 確保請求頭包含正確的認證信息(如 Authorization)。
  • 數據未刷新:
    • 調用 dataSource.read() 后需等待異步響應,通過 requestEnd 事件監聽完成狀態。
  • 跨域問題:
    • 服務端需配置 Access-Control-Allow-Origin,Kendo 無法繞過瀏覽器安全策略。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84498.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

宇樹開源 Qmini 雙足機器人,可通過 3D 打印動手制作,使用樹莓派作為主控制器

Unitree Qmini 是一款由宇樹科技設計并開源的低成本雙足機器人&#xff0c;開發者可以完全通過 3D 打印進行復刻。Qmini 專為業余愛好者、教育工作者和研究人員設計&#xff0c;使用戶能夠快速上手&#xff0c;并以類似樂高的模塊化方式組裝自己的機器人。該項目為機器人技術提…

解決華為云服務器無法ping通github問題

在push代碼到github上的時候&#xff0c;發現顯示22端口無法連接&#xff0c;在已經開放了端口&#xff0c;防火墻關閉的情況下仍然無法連接到GitHub。 發現是服務器和github斷連&#xff0c;選擇 sudo vim /etc/hosts 添加一下代碼 # GitHub Start140.82.121.4 gith…

關于electron-vite koffi 讀取 dll 打包等問題得記錄

koffi const koffi require(‘koffi’) import iconv from ‘iconv-lite’;const libPath path.resolve(__dirname, ‘…/…/resources/dll/sss.dll’) const yktLib koffi.load(libPath) const ret yktLib.func(‘string sss(string Url, string Data, string OutData)’…

【開發技術】.Net使用FFmpeg視頻特定幀上繪制內容

目錄 一、目的 二、解決方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg調用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 濾鏡來繪制 ROI 三、總結 一、目的 當前市場上有很多目標檢測智能識別的相關算法&#xff0c;當前調用一個醫療行業的AI識別算法后返回…

通過關鍵字批量抓取淘寶商品數據實現方法途徑分享--API

item_search 按關鍵字搜索淘寶商品item_search_tmall 按關鍵字搜索天貓商品item_search_pro 高級關鍵字搜索淘寶商品item_search_img 按圖搜索淘寶商品&#xff08;拍立淘&#xff09;item_search_shop 獲得店鋪的所有商品 一、引言 在電商領域&#xff0c;獲取淘寶商品數據對…

用 Lazarus IDE 寫一個郵件客戶端軟件,能收發郵件,編寫郵件

下面是一個使用Lazarus IDE開發的基本郵件客戶端實現方案&#xff0c;包含收發郵件和編寫郵件的核心功能。我們將使用Synapse庫&#xff08;跨平臺的網絡通信庫&#xff09;來處理郵件協議。 步驟1&#xff1a;安裝依賴 安裝Synapse庫&#xff1a; 下載地址&#xff1a;https:…

第二部分-IP及子網劃分

目錄 一、什么是IP? 1.1.IP地址的由來 1.2.IP地址的表示 1.3.IP地址的構成 1.4.IP地址的分類 1.5.IP地址類型 1.6.IP地址的計算 1.7.私網IP地址 1.8.特殊IP地址 二、子網劃分 2.1.什么是子網劃分及為什么要進行子網劃分? 2.2.如何進行子網劃分&#xff1f; 實例&#xff1a; …

【javascript】泡泡龍游戲中反彈和查找匹配算法

引言 泡泡龍游戲的核心玩法依賴于物理碰撞與顏色匹配的算法實現。反彈效果需要模擬泡泡與邊界或障礙物的彈性碰撞&#xff0c;確保軌跡符合物理規律&#xff1b;匹配算法則需快速檢測相鄰同色泡泡&#xff0c;觸發消除邏輯。高效的處理方式直接影響游戲流暢度和玩家體驗。 以…

如何使用deepseek滿血版

deepseek 訪問方式 DeepSeek滿血版可通過官方網站或官方應用商店下載安裝。確保設備滿足最低系統要求&#xff0c;如操作系統版本和硬件配置。 賬號注冊與登錄 訪問平臺后完成賬號注冊流程&#xff0c;提供必要信息并驗證郵箱或手機號。登錄后進入用戶中心&#xff0c;查看…

網絡管理【Linux/Unix/Windows】命令大全

在跨平臺網絡運維中&#xff0c;管理員常需快速切換Windows與Linux環境下的命令操作。本文整合了核心網絡管理命令的跨平臺對照表&#xff0c;涵蓋連通性測試、路由追蹤、DNS解析、ARP管理、會話監控等高頻場景。無論您負責服務器維護、網絡排障還是安全審計&#xff0c;此表可…

Gremlin創建schema(包括實體和關系)

1、構建圖譜schema&#xff0c;流程包括圖創建、實體構建以及關系構建。 創建圖時需要指定圖庫名稱以及主鍵字段。 實體構建時需要指定主鍵字段&#xff0c;每個屬性需要指定數據類型&#xff0c;是否非空以及默認值。關系構建時需要包括關系名稱、指向頭實體的標簽&#xff0c…

[論文閱讀]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代碼&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…

鴻蒙Next倉頡語言開發實戰教程:店鋪詳情頁

各位好&#xff0c;幽藍君又來分享倉頡開發教程了&#xff0c;今天的內容是店鋪詳情頁&#xff1a; 這個頁面的內容看似簡單&#xff0c;其實有很多小細節需要注意&#xff0c;主要還是讓大家熟悉List容器的使用。 整個頁面由導航欄和List容器兩大部分組成&#xff0c;導航欄我…

FEMFAT許可使用數據分析工具介紹

在高度競爭和快速變化的工程仿真領域&#xff0c;數據驅動的決策變得越來越重要。為了更好地了解FEMFAT許可的使用情況、提高資源利用率、優化工作流程&#xff0c;FEMFAT許可使用數據分析工具應運而生。本文將為您介紹這款強大的工具&#xff0c;助您輕松駕馭FEMFAT許可數據&a…

大模型原理面試題及參考答案

目錄 什么是大語言模型(LLM)?它與傳統語言模型的本質差異在哪里? 自回歸模型(autoregressive)與掩碼語言模型(masked LM)的異同是什么?各適合于哪些任務? Transformer 的核心構件——多頭自注意力機制如何捕捉長距離依賴? 位置編碼(positional encoding)的作用…

Gartner<Reference Architecture Brief: Data Integration>學習心得

數據集成參考架構解析 引言 在當今數字化時代,數據已成為企業最寶貴的資產之一。隨著企業規模的不斷擴大和業務的日益復雜,數據來源也變得多樣化,包括客戶關系管理(CRM)、企業資源規劃(ERP)、人力資源管理(HR)和市場營銷等領域的運營系統。這些系統雖然在其特定功能…

JAVASE:方法

JavaSE 方法詳解 一、方法的核心概念 方法&#xff08;Method&#xff09;是一組執行特定任務的語句集合&#xff0c;它將代碼邏輯封裝為可復用的單元&#xff0c;提高代碼的模塊化和可維護性。 方法的組成&#xff1a; [修飾符] 返回類型 方法名([參數列表]) {// 方法體[r…

MXNet-cu101 + CUDA 10.1 在 Windows 11 上啟用 GPU 的完整指南

一、報錯信息 (pytorch) C:\Users\Administrator\Desktop\test>D:/conda/anaconda3/envs/pytorch/python.exe c:/Users/Administrator/Desktop/test/test.py Traceback (most recent call last): File “c:/Users/Administrator/Desktop/test/test.py”, line 1, in import…

Python基礎數據類型與運算符全面解析

Python作為一門動態類型語言&#xff0c;擁有豐富的內置數據類型和運算符系統&#xff0c;構成了編程的基礎。本文將深入介紹Python核心數據類型的基本概念、特點及使用方法&#xff0c;并系統梳理運算符的分類、優先級和實際應用示例&#xff0c;幫助開發者全面掌握Python的基…

Mysql分區(單服務器應對大數據量方案)

參考資料&#xff1a; 參考視頻 參考博客 分區的復雜操作 參考資料 概述&#xff1a; 這里只講實操&#xff0c;不講原理&#xff0c;看原理請看參考資料Mysql自5.1后支持分區&#xff0c;在Mysql8之后只有InnoDB支持分區&#xff0c;Mysiam不支持分區本例只是一個簡單的說…