登錄
注冊(cè)
關(guān)于我們
簡(jiǎn)體中文
ENGLISH
搜索
購(gòu)物車
0 ITEMS ON YOUR CART
去購(gòu)物車結(jié)算
合計(jì):
¥0
首頁(yè)
動(dòng)態(tài)
方案
案例
專欄
期刊
聯(lián)系我們
首頁(yè)
期刊
[Ext JS6]視圖模型和數(shù)據(jù)綁定
Ext JS開發(fā)大全
第1章 Ext JS快速入門示例[4/4]
第12章[12.10]富文本編輯器 CKEditor與Ext JS的整合
第12章[12.10.1] Ext JS + CKEditor+Spring Boot 實(shí)現(xiàn)編輯器圖片上傳
第11章[11.6] Ext JS 自行搭建遠(yuǎn)端庫(kù)的包升級(jí)版本后找不到的問題解決
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird編輯
ext命令集
第12章[12.3] Ext JSGrid中的超鏈接列及其功能實(shí)現(xiàn)
[Ext JS]textfield添加compositionstart、compositionupdate 和compositionend _os
[Ext JS ] 動(dòng)添切換字段的必填與非必填
3.1 Ext JS 組件總覽
[Ext JS] Grid表格批量編輯的實(shí)現(xiàn)
Ext JS 快速開發(fā)工具
帶觸發(fā)器按鈕的輸入框
Ext JS的布爾對(duì)象類型處理及便捷方法
Ext JS的Object類型處理及便捷方法
ExtJS RadioGroup(單選按鈕組) 使用及注意事項(xiàng)
Ext JS 模擬后端數(shù)據(jù)實(shí)現(xiàn)
ToolTip 實(shí)現(xiàn)全介紹
Ext JS下拉單選框(Combobox,TagFied)使用及疑難問題解決
Ext JS應(yīng)用測(cè)試概覽
Sencha Studio 監(jiān)視工具( Inspect Tool)
Ext JS 4 升級(jí)指南
Ext JS 如何定義公用方法(單例類 or 靜態(tài)方法)
Ext JS的模塊化開發(fā)(Package)
Ext3 -- Form 實(shí)例。 用來(lái)migrate file 數(shù)據(jù)到DB用的
ExtJS 3 在Tab下加入Form 實(shí)例
Extjs Grid 中給已經(jīng)添加過(guò)Filter的列增加標(biāo)識(shí)
Extjs 實(shí)戰(zhàn)之 Ext.tree.TreePanel Tree無(wú)法顯示
Extjs彈出框的異步執(zhí)行
Grid 動(dòng)態(tài)該表列( reconfigure)的性能改善
Spring Boot Ext JS準(zhǔn)前后端框架應(yīng)用的會(huì)話(Session)處理
[Ext JS 4] Extjs 圖表 Legend(圖例)的分行與分列顯示
[Ext JS 4] Extjs 之 initComponent 和 constructor的區(qū)別
[Ext JS 4] Grid 中的單元格添加Tooltip 的效果
[Ext JS 4] Grid 實(shí)戰(zhàn)之分頁(yè)功能
[Ext JS 4] Grid 組件
[Ext JS 4] MVC 應(yīng)用程序框架
[Ext JS 4] MVC 應(yīng)用程序框架
發(fā)布 [Ext JS 4] contentEL,renderTo, applyTo 釋義與區(qū)別
[Ext JS 4] 動(dòng)態(tài)加載
[Ext JS 4] 實(shí)戰(zhàn)之 ComboBox 和 DateField (消失之解決辦法)
[Ext JS 4] 實(shí)戰(zhàn)之 Picker 和 Picker Field
[Ext JS 4] 實(shí)戰(zhàn)之 帶week(星期)的日期選擇控件(二)
[Ext JS 4] 實(shí)戰(zhàn)之 ComboBox 和 DateField 的點(diǎn)擊事件在IE下失效
## [Ext JS 4] 實(shí)戰(zhàn)之 帶week(星期)的日期選擇控件(三)
[Ext JS 4] 實(shí)戰(zhàn)之 帶week(星期)的日期選擇控件
[Ext JS 4] 實(shí)戰(zhàn)之Chart 坐標(biāo)控制(單坐標(biāo),雙坐標(biāo))
[Ext JS 4] 實(shí)戰(zhàn)之Chart, Column Chart 定制顏色
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird 動(dòng)態(tài)添加列
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird 動(dòng)態(tài)添加列續(xù)(性能考慮)
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird 動(dòng)態(tài)添加行
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird 添加按鈕列
[Ext JS 4] 實(shí)戰(zhàn)之Grid, Tree Gird編輯Cell
[Ext JS 4] 實(shí)戰(zhàn)之Load Mask - 在Grid Reconfigure的使用狀況
[Ext JS 4] 實(shí)戰(zhàn)之Load Mask(加載遮罩)的顯示與隱藏
[Ext JS 4] 實(shí)戰(zhàn)之多選下拉單 (帶checkbox) 續(xù) - 帶ALL 選項(xiàng)
[Ext JS 4] 實(shí)戰(zhàn)之多選下拉單 (帶checkbox)
[Ext JS 4] 實(shí)戰(zhàn)之升級(jí)系列一[Ext jS 3-->Ext JS 4]
[Ext JS 4] 實(shí)戰(zhàn)之將chart導(dǎo)出為png, jpg 格式的文件
[Ext JS 4] 實(shí)戰(zhàn)之瀏覽器兼容
[Ext JS 4] 布局之實(shí)戰(zhàn)二 - 中間區(qū)塊不會(huì)自動(dòng)伸展 (tab)續(xù)
[Ext JS 4] 組件之圖表
[Ext JS 4]后臺(tái)自動(dòng)產(chǎn)生圖檔
[Ext JS 4]性能優(yōu)化
[Ext JS 7 ]7.5 自適應(yīng)配置 - Responsive Configs
[Ext JS 7] 關(guān)聯(lián)(Association)
[Ext JS 7]事件(Event)
[Ext JS 7]ClassRequire錯(cuò)誤解決
[Ext JS 7]的開發(fā)模式
[Ext JS 7]基于NPM的開發(fā)
[Ext JS ] 動(dòng)添切換字段的必填與非必填
[Ext JS4] 數(shù)據(jù)包
[Ext JS4系列]Ext JS4 入門
[Ext JS6] Grid不同列的關(guān)聯(lián)編輯
[Ext JS6] ViewControllers-視圖控制器
[Ext JS6]Ext.Template
[Ext JS6]Sencha Cmd
[Ext JS6]編碼規(guī)范
[Ext JS6]多類型設(shè)備開發(fā)
[Ext JS6]工作區(qū)-Workspace
[Ext JS6]路由(Routing)及使用
[Ext JS6]視圖模型和數(shù)據(jù)綁定
[Ext JS6實(shí)戰(zhàn)] Ajax獲取Tree Store
[Ext JS6實(shí)戰(zhàn)] Ext.XTemplate
[Ext JS6實(shí)戰(zhàn)]動(dòng)態(tài)數(shù)據(jù)綁定
[Ext JS] Sencha Cmd命令參考之二
[Ext JS] Sencha Cmd命令參考之一
[Ext JS] Group Grid-分組網(wǎng)格
[Ext JS] Group Grid-分組網(wǎng)格
[Ext JS]嵌套Grid的實(shí)現(xiàn)及注意事項(xiàng)
[Ext JS]SimXhr.js__dc=1659315492151_65 Uncaught TypeError問題分析與解決
[Ext JS]Sencha Studio安裝與快速介紹之一
[Ext JS]textfield 添加 compositionstart、compositionupdate 和 compositionend
[Ext JS]圖片顯示方式
[ExtJS 6]Grid分頁(yè)工具欄無(wú)效問題解決
[ExtJS6]ResponsiveColumn-自適應(yīng)列布局
[Extjs 4] 類系統(tǒng)
基于Ext JS的模塊化應(yīng)用框架搭建及開發(fā)
[Ext JS] 自行搭建遠(yuǎn)端庫(kù)的包升級(jí)版本后找不到的問題解決-The following versions are available
[Ext JS]鼠標(biāo)移入移除時(shí)彈出和關(guān)閉窗口
[Ext JS]富文本編輯器 CKEditor與Ext JS的整合
[Ext JS]可編輯列Grid的全場(chǎng)景開發(fā)
['Ext JS]Grid中的超鏈接列及其功能實(shí)現(xiàn)
[Ext JS]Ext JS + CKEditor+Spring Boot 實(shí)現(xiàn)編輯器圖片上傳
[Ext JS]介紹與快速入門1
[Ext JS]實(shí)現(xiàn)帶動(dòng)態(tài)數(shù)字的圖標(biāo)
Spring Boot+Ext JS 實(shí)現(xiàn)圖形驗(yàn)證碼
Ext JS介紹與快速入門2
Ext JS開發(fā)基本環(huán)境準(zhǔn)備與項(xiàng)目創(chuàng)建
[Ext JS]開發(fā)模式及快速測(cè)試方式
[Ext JS]多類型終端-電腦、移動(dòng)端(手機(jī)、平板)
[Ext JS]基于Ext JS的MVC/MVVM架構(gòu)的應(yīng)用開發(fā)模式
[Ext JS]Ext JS的類與類體系
[Ext JS]Ext JS組件、容器與布局
[Ext JS]組件與容器的選擇與開發(fā)
[Ext JS]Ext JS數(shù)據(jù)模型與數(shù)據(jù)封裝
[Ext JS]Ext JS的控制器類型及使用
[Ext JS]說(shuō)透Ext JS的窗口及對(duì)話框用法
[Ext JS]說(shuō)透Ext JS的窗口及對(duì)話框用法
[Ext js]Grid行選擇的多種場(chǎng)景和實(shí)現(xiàn)方式
[Ext JS]Ext JS類的繼承與混合
CmsWing
[Ext JS6]視圖模型和數(shù)據(jù)綁定
## [Ext JS6]視圖模型和數(shù)據(jù)綁定 ### ViewModel ViewModel是一個(gè)管理數(shù)據(jù)對(duì)象的類, 它運(yùn)行對(duì)它感興趣的組件綁定它并在變化的時(shí)候得到通知。ViewModel和ViewController一樣,是屬于某個(gè) View的。子視圖可以繼承父的視圖模型。 使用 bind的配置來(lái)綁定數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生改變時(shí),會(huì)調(diào)用對(duì)應(yīng)的 setter方法。 ### 組件綁定 組件是數(shù)據(jù)綁定的主要方式。 綁定的配置需要有setter方法,比如Panel 的title配置,title有setTitle()方法, 所有可以綁定數(shù)據(jù)。 以width為例(有setWidth()方法) ```javascript Ext.create('Ext.panel.Panel', { title: 'Simple Form', viewModel: { type: 'test' // we will define the "test" ViewModel soon }, bind: { html: ' Hello {name}', width: '{someWidth}' }}); ``` 這里綁定的語(yǔ)法類似于Ext.Template。 如果綁定布爾類型的值的話, ```javascript bind: { hidden: '{!name}' // negated } ``` name也可是一個(gè)String類型。 綁定的優(yōu)先級(jí) 數(shù)據(jù)綁定一般要優(yōu)先于靜態(tài)配置。 子組件的綁定 一個(gè)組件的所有子組件可以訪問這個(gè)組件的 viewModel 看實(shí)例: ```javascript Ext.create('Ext.panel.Panel', { title: 'Simple Form', viewModel: { type: 'test' }, layout: 'form', defaultType: 'textfield', items: [{ fieldLabel: 'First Name', bind: '{firstName}' // uses "test" ViewModel from parent },{ fieldLabel: 'Last Name', bind: '{lastName}' }]}); ``` ### 雙向綁定 雙向綁定意味著視圖和模型的數(shù)據(jù)實(shí)時(shí)同步。 視圖的數(shù)據(jù)改變自動(dòng)寫到模型中。這回自動(dòng)更新綁定到同一數(shù)據(jù)的其他組件。 需要注意的是并不是所有的配置都會(huì)將其更改發(fā)布到 ViewModel。 定義publish和twoWayBindable會(huì)將改動(dòng)寫回ViewModel。使用publishState方法也可以在組件和應(yīng)用邏輯之間發(fā)布數(shù)據(jù)。 publish和twoWayBindable是組件的配置項(xiàng)。支持一個(gè)或多個(gè)屬性。看個(gè)例子: View Model 實(shí)例效果如下: ![](/upload/picture/2022-10-09/upload_e8aa3e7fa143269760771d9e8d2a8c0d.png) 標(biāo)題的顯示和按鈕是否顯示會(huì)根據(jù)輸入框的值動(dòng)態(tài)改變。 也就是: 視圖模型的值改變了, 會(huì)反應(yīng)到視圖上。 視圖上的值進(jìn)行修改, 視圖模型的值也會(huì)修改。 綁定和組件狀態(tài) 某些時(shí)候組件的狀態(tài), 類似checkbox是否選中或是 Gird中選擇一行,對(duì)其他的組件會(huì)有影響。當(dāng)一個(gè)組件有使用reference?來(lái)表示,這個(gè)組件會(huì)在視圖模型中發(fā)布一些關(guān)鍵的屬性。 ```javascript Ext.create('Ext.panel.Panel', { title : 'Login Form', width : 200, viewModel : { }, renderTo : Ext.getBody(), items : [ { xtype : 'checkbox', boxLabel : 'Manual Login', reference : 'manualLogin' }, { xtype : 'textfield', fieldLabel : 'User Name', bind : { disabled : '{!manualLogin.checked}' } } ] }); ``` 之上只有’Manual Login’這個(gè)復(fù)選框選中, 才可以在輸入框中進(jìn)行輸入。 這里雖然viewModel中沒有設(shè)置, 但是viewModel不能少, 好的做法是定義實(shí)際的viewModel類型。 #### 多值綁定 也可以綁定多個(gè)值 ```javascript Ext.create('Ext.Component', { bind: { data: { fname: '{firstName}', lname: '{lastName}' } }}); ``` #### 綁定記錄 也可以綁定一個(gè)Store中的記錄 ```javascript Ext.create('Ext.Component', { bind: { data: { reference: 'User', id: 42 } }}) ``` User是Ext.data.Session類型。 #### 關(guān)聯(lián)綁定 ```javascript Ext.create('Ext.Component', { bind: { data: { reference: 'User', id: 42, association: 'address' } }}); ``` #### 綁定的選項(xiàng)設(shè)置 bindTo 綁定一個(gè)值后自動(dòng)斷開連接 ```javascript Ext.create('Ext.Component', { bind: { data: { bindTo: '{name}', single: true } }}); ``` deep-對(duì)象屬性改變得到通知 ```javascript Ext.create('Ext.Component', { bind: { data: { bindTo: '{someObject}', deep: true } }}); ``` ### 視圖模型公式 公式實(shí)例: ```javascript Ext.define('Osxm.view.FormulasViewMode', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.formulavm', data:{ x:1, y:2 }, formulas: { x2y: function (get) { return get('x2') * get('y'); }, x2: function (get) { return get('x') * 2; } } });Ext.create('Ext.panel.Panel', { title : 'Formulas View Model', width : 200, viewModel : { type : 'formulavm' }, renderTo : Ext.getBody(), defaultType : 'textfield', items : [ { xtype : 'textfield', fieldLabel : 'x', bind : '{x}' } ,{ xtype : 'textfield', fieldLabel : 'y', bind : '{y}' } ,{ xtype : 'textfield', fieldLabel : 'x*2', bind : '{x2}' } ,{ xtype : 'textfield', fieldLabel : 'x*2*y', bind : '{x2y}' }] }); ``` 比較好的是使用顯式綁定: ```javascript x3:{ bind: { x: '{x}', y: '{y}' }, get: function (data) { return data.x + data.y; //這里是字符串相加 } } ``` 雙向公式 可以通過(guò)set方法實(shí)現(xiàn)雙向公式, 類似: ```javascript Ext.define('MyApp.view.TestViewModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.test', formulas: { name: { get: function (get) { var fn = get('firstName'), ln = get('lastName'); return (fn && ln) ? (fn + ' ' + ln) : (fn || ln || ''); }, set: function (value) { var space = value.indexOf(' '), split = (space < 0) ? value.length : space; this.set({ firstName: value.substring(0, split), lastName: value.substring(split + 1) }); } } }}); ``` ### 開發(fā)建議 為避免濫用和內(nèi)存泄漏, 一些最佳實(shí)踐: 使用 type來(lái)配置使用視圖模型 ```javascript Ext.define('MyApp.view.TestView', { //... viewModel: { type: 'test' }, }); ``` 1.命名顯而易見 2.不必要的話不要在對(duì)象中嵌套數(shù)據(jù) 3.使用子的視圖模型,在組件需要的時(shí)候可以清理數(shù)據(jù) 4.非必要,不要?jiǎng)?chuàng)建子視圖模型 5使用公式替換重復(fù)綁定 6.不要太深 7.公式需要穩(wěn)定。
← 上一篇:工業(yè)ERP系統(tǒng)五十問...
下一篇:科學(xué)管理與信息化建設(shè)【第4期】裝配式建筑... →
網(wǎng)站導(dǎo)航
首頁(yè)
動(dòng)態(tài)
方案
案例
專欄
期刊
聯(lián)系我們