【分享】WeX5的正確打開方式(5)——綁定機制

今天繼續WeX5的綁定機制。

需求分析

記賬本要實現的效果就是可以展示所有賬單,還能實時動態編輯每一筆賬單,官方案例的效果圖如下:

展示頁:

圖片描述

編輯頁

圖片描述

個人覺得官方案例加入了許多元素,不熟悉的同學每一個點都很難理解,所以為了更清晰地介紹綁定機制,小茄這里去掉了數據庫和數據組件,改用寫死的JSON數據來測試;UI層上也做簡化,去掉頁面片段的跳轉,使用一個頁面片段進行演示。

頁面布局

先看看頁面布局,由于要展示多項數據,所以明顯需要一個列表組件;另外為了實現編輯功能,還需要布局一個編輯組件。布局起來非常簡單:

展示列表組件:

圖片描述

列表組件使用WeX5現成的 list 控件,這個控件內部自帶一個 list 子項的模板,在模板中放入所需的幾個 output 和刪除按鈕即可。當然,為了達到上圖的布局效果,還需要加入一些布局組件。有問題的同學可以看看官方視頻教程,樣式的設置也請參考視頻,這不是本文的重點,在此不再贅述。

數據綁定

重要的一點是要將JSON數據綁定到list模板中,這里用的是foreach綁定,見下圖(當然也可以用template綁定+模板文件來實現,不過那樣的話還需要編寫模板文件,在自定義較強的場景下可以使用)。其他組件相應的綁定也如上圖所示,分別在各個 output 的 bind-ref 中輸入 fClass、fMoney等。

圖片描述

JS中給 accountData 一組靜態數據,實際應用中這些數據應該是從后臺數據庫中獲取的。

 1 var testData = [{2     fType : 'out',3     fClass : '購物',4     fMoney : 465,5     fDate : '2015-05-24',6     fDescription : '這是備注'7 }, {8     fType : 'out',9     fClass : '餐費',10     fMoney : 50,11     fDate : '2015-10-22',12     fDescription : '吃麻辣燙'13 }, {14     fType : 'in',15     fClass : '獎金',16     fMoney : 500,17     fDate : '2015-10-22',18     fDescription : '干得不錯'19 }, {20     fType : 'in',21     fClass : '交通',22     fMoney : 85,23     fDate : '2015-10-22',24     fDescription : '打了個車'25 }];26 27 var Model = function() {28     this.callParent();29     this.accountData = testData;30 };

這時候打開瀏覽器調試可以看到JSON已經完整展現在頁面上。回顧一下上兩篇文章的內容,明顯上述寫法就是簡單的初始化,并沒有設置可觀察對象,也就是說數據變更也不會更新UI。下面來設置雙向綁定。

首先要明確的一點是,我們不單要監視 testData 數組的狀態變化,還需要監視每個JSON數據的變化,所以單純的設置數組為可監視對象是不夠的,還需要監視數組的值。這里需要改變一下寫法,不能再一次性賦值了,要改成構造函數動態賦值。

 1 function newItem(data) {2     var testItem = {3         fType : justep.Bind.observable(data.fType),4         fClass : justep.Bind.observable(data.fClass),5         fMoney : justep.Bind.observable(data.fMoney),6         fDate : justep.Bind.observable(data.fDate),7         fDescription : justep.Bind.observable(data.fDescription)8     };9     return testItem;10 }11 12 var Model = function() {13     this.callParent();14     this.accountData = justep.Bind.observableArray([]);15     for (var n = 0, len = testData.length; n < len; n++) {16         this.accountData.push(newItem(testData[n]));17     }18 };

這樣綁定之后,無論是改變數組(增減數組項)還是改變具體的數據都可以讓界面自動更新了。如果采用最開始的寫法,那是不會自動更新UI界面的。

圖片描述

上面的增加項已經是固定的,示范下而已,現在試著動態改變數據。先放效果:

圖片描述

相比官方的轉到一個獨立頁面的效果,這個效果更加的符合認知習慣,而且不用刷到另一頁,體驗更加友好,鼠標點哪改哪~

做法也很簡單,就是在output框下再接一個input框,設置output和input的 visible互斥,點擊事件更改visible狀態。HTML源碼片段是這樣的:

1 <div component="$UI/system/components/justep/output/output" class="x-output h3" xid="output2" bind-visible="!editing.get()" bind-ref="fClass" bind-click="editBind" />2 <input component="$UI/system/components/justep/input/input" class="form-control h3" xid="input1" bind-visible="editing" bind-value="fClass" bind-hasFocus="editing"/>

js 里面就一句:

 1 Model.prototype.editBind = function(event){2     var row = event.bindingContext.$object;3     row.editing.set(true);4 };5

當然,editing 也必須要設置為可觀察對象,不然沒法更新UI展現。

1 function newItem(data) {2     var testItem = {3         fType : justep.Bind.observable(data.fType),4         fClass : justep.Bind.observable(data.fClass),5         fMoney : justep.Bind.observable(data.fMoney),6         fDate : justep.Bind.observable(data.fDate),7         fDescription : justep.Bind.observable(data.fDescription),8         editing: justep.Bind.observable(data.editing || false)9     };10     return testItem;11 }

記賬本還要有個刪除功能,這個當然也是非常簡單了,直接操作可觀察對象數組即可,事件綁定在刪除按鈕上。

1 Model.prototype.deleteBtnClick = function(event) {2     var row = event.bindingContext.$object;3     this.accountData.remove(row);4 };

還有個增加記錄,增加的操作就是先增加一條默認的數據,然后讓用戶去改動就變成新建啦,多加一個增加按鈕綁定增加事件即可。

1 Model.prototype.addItem = function(event){2     this.accountData.push(newItem({3         fType : 'in',4         fClass : '獎金',5         fMoney : 5000,6         fDate : '2015-10-22',7         fDescription : '干得不錯'8     }));9 };

這樣就算做好了一個記賬本啦,是不是感覺html5 APP開發很簡單呢??官方的教程使用了data組件與后臺數據庫通信,其實也就是將上述的testData換成Data組件而已,理解了綁定再去看就簡單了。
哦,還有個美化的,根據收入支出分類以不同的顏色顯示:li 項的 bind-css 設置為 {'account-in' : fType.get() == 'in','account-out' : fType.get()== 'out'} 就OK了,上個圖:

圖片描述

Mapping 插件

大家可以看到上面為了將JSON對象中的每一項都設為可觀察對象,我這邊使用了一個 newItem 函數來將所有元素設置為可觀察對象,而Mapping 插件就是起同樣作用的。這里就不再舉例說明了,大家看官方視頻對照著用就可以了。

總結
這一篇以一個記賬本案例來總結了一下各種綁定的用法,希望能加深大家對綁定機制的理解。碼字不易,順手點贊哈~

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

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

相關文章

HALCON常用算子(HALCON13.0)

HALCON常用算子&#xff08;HALCON13.0&#xff09;Chapter 9--Developdev_clear_window ( : : : )功能&#xff1a;清除活動圖形窗口的內容dev_close_window ( : : : )功能&#xff1a;關閉活動圖形窗口。dev_display ( Object : : : )功能&#xff1a;在現有圖形窗口中顯示圖…

關于未捕獲異常的處理(WPF)

轉載自&#xff1a;http://www.cnblogs.com/chenxizhang/p/3280947.html 這一篇文章來談談對于WPF應用程序開發中的未捕獲異常的處理。 首先&#xff0c;我們當然是要求應用程序開發人員&#xff0c;盡可能地在程序可能出現異常的地方都去捕捉異常&#xff0c;使用try…catch的…

設計模式--23、訪問者模式

訪問者模式是一種較為復雜的行為型設計模式&#xff0c;它包含訪問者和被訪問元素兩個主要組成部分&#xff0c;這些被訪問的元素通常具有不同的類型&#xff0c;且不同的訪問者可以對它們進行不同的訪問操作。例如處方單中的各種藥品信息就是被訪問的元素&#xff0c;而劃價人…

C#串口SerialPort常用屬性方法

SerialPort(): //屬性 .BaudRate;獲取或設置波特率 .BytesToRead;得到 接收到數據的字節數 .BytesToWrites;得到送往串口的字節數 .DataBits;獲取或設置數據位 .IsOpen;獲取一個值&#xff0c;判斷串口是否打開 .Pariy;獲取或設置校驗位 .PortName;串口名稱 .ReadBufferSize;獲…

NTFS文件系統的簡述

NTFS文件系統的設計思想基于穩定性、和安全性并支持大容量存儲設備的文件系統&#xff1a;1.它提供日志可以增加文件系統的容錯率&#xff0c;可以有效的保護系統的安全。NTFS是一個可恢復的文件系統。在NTFS分區上即使強制關機后&#xff0c;一般也不需要運行CHKDSK命令修復磁…

Rxjava基礎

現在很多Android App的開發開始使用Rxjava&#xff0c;但是Rxjava以學習曲線陡峭著稱&#xff0c;入門有些困難。經過一段時間的學習和使用&#xff0c;這里來介紹一下我對Rxjava的理解。 說到Rxjava首先需要了解的兩個東西&#xff0c;一個是Observable&#xff08;被觀察者&a…

『協議』XML-RPC 協議規格說明

為什么80%的碼農都做不了架構師&#xff1f;>>> 這篇文章提供所有實現XML-RPC協議所需要的內容。 一覽 XML-RPC是一個工作在因特網上的遠端程序調用&#xff08;Remote Procedure Calling&#xff09;協議。 XML-RPC消息是一個HTTP-POST請求&#xff08;Request&…

Qt之QLineEdit詳解(附源碼)

原博客地址&#xff1a;http://blog.csdn.net/liang19890820/article/details/52044639&#xff0c;感謝原作者總結和分享。 簡述 QLineEdit是一個單行文本輸入框。 QLineEdit允許用戶輸入和編輯單行純文本&#xff0c;提供了很多有用的編輯功能&#xff0c;包括&#xff1a;撤…

POJ 1323 Game Prediction#貪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能勝幾次 //說明對方是要盡可能讓我輸 //但為了避免浪費&#xff0c;對方會用比我的牌大的牌中的最小pip的牌來擊敗我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt學習之鍵盤事件( keyPressEvent)

//最近一直忙于做驅動&#xff0c;對底層東西很是好奇&#xff0c;好奇鍵盤是 怎么區分每個鍵值的&#xff0c;又是怎么響應的&#xff01;因此&#xff0c;就有了下面這些代碼//環境windows 工具qt 語言c//在主窗體類中聲明鍵盤響應函數 void keyPressEvent(QKeyEvent * event…

C#json數據的序列化和反序列化(將數據轉換為對象或對象集合)

引用 System.Runtime.Serialization.Json 轉載于:https://www.cnblogs.com/a849788087/p/5645828.html

位圖(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位圖(bmp)文件格式分析 作者&#xff1a;深藍&#xff08;由博主分享&#xff09; 一、什么是位圖 計算機能以位圖和矢量圖格式顯示圖像。 1、位圖(Bitmap)&#xff1a; 圖像又稱點陣圖或光…

匯付 支付,痛苦的接入過程

有文檔&#xff0c;但是&#xff0c;寫文檔的人明白&#xff0c;看文檔的人很有難度。 沒有SDK&#xff0c;要自已寫。 然后&#xff0c;錢的流入流出都必須經過虛擬錢包&#xff0c;提現還要綁取現卡&#xff0c;這個我也能理解&#xff0c;不能理解的是&#xff0c;訂單退款&…

隨筆分類 - HALCON學習例程中文詳解

from: https://www.cnblogs.com/chita/category/563492.html隨筆分類 - HALCON學習例程中文詳解HALCON學習例程中文詳解跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距摘要: 跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距* This example program demonstr…

WinCE6 如何去掉控制面板中的應用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把對應的cpl 干掉例如區域設置 好像是2個 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…

軟件自動更新解決方案及QT實現

from&#xff1a;https://blog.csdn.net/hulinhulin/article/details/46839107軟件自動更新解決放案及QT實現...11 文件的版本控制-XML.22 更新程序的實現...22.1 界面設置...22.2 程序功能...32.2.1 下載網絡數據...32.2.2 XML文件的分析...62.2.3 下載XML文件的DownLoadXML函…

java 基本功 —— 內存相關

2019獨角獸企業重金招聘Python工程師標準>>> 首先我們來說說內存&#xff0c;因為從內存的角度來出發來分析一些變量&#xff0c;引用或者對象的生命周期會更好理解一些。 java是一門編程語言&#xff0c;他跟C有什么不同呢&#xff1f;本質上&#xff0c;他們都是一…

DOM事件處理有三個階段

DOM事件處理有三個階段&#xff1a; 捕捉階段&#xff08;capture phase&#xff09;&#xff1a;從最上層元素&#xff0c;直到最下層&#xff08;你點擊的那個target&#xff09;元素。路過的所有節點都可以捕捉到該事件。命中階段&#xff08;target phase&#xff09;&…

客戶端程序自動更新(升級)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自動更新原理C/S程序自動升級是一個很重要的功能&#xff0c;原理其實很簡單&#xff0c;一般包含兩個程序一個是主程序&#xff0c;也就是除了升級功能以外的程序&#xff0c;另一個就…

怎么用源程序把ChemDraw結構復制到Word文檔

在學習化學過程中&#xff0c;不可避免的會接觸到各種化學結構。這個時候就需要通過繪制化學結構來進行這方面的學習和傳播。ChemDraw Professional 15就可以輔助完成這方面的工作。很多的用戶朋友會通過選中后復制粘貼可以將ChemDraw結構復制到Word文檔中&#xff0c;但這只是…