xmlplus組件設(shè)計(jì)系列之文本框(TextBox)(3)
文本框是頁(yè)面中最常用的輸入組件,它的默認(rèn)使用方式如下:
<input type='text'/>
當(dāng)然,這里的 `type='text' 可以略去不寫(xiě)。大部分情況下,使用默認(rèn)的文本框作為輸入組件是沒(méi)什么問(wèn)題的,但在具體的項(xiàng)目中,難免會(huì)有功能擴(kuò)展的需求。這里僅以如何增加文本框數(shù)據(jù)的格式化輸入輸出能力為例說(shuō)明如何擴(kuò)展原生的文本框組件。除了本章的內(nèi)容,你也可以參考官方文檔中的 參數(shù)映射 一章。
目標(biāo)組件的功能分析
對(duì)于原生的文本框,我們獲取到的值是文本類型的,就像下面的示例所展示的:
Example: {
xml: "<input id='input' value='text'/>",
fun: function (sys, items, opts) {
console.log(typeof this.prop("value")); // string
}
}
如果需要其它類型的數(shù)值,就需要對(duì)獲取到的數(shù)據(jù)進(jìn)行格式化操作。比如,如果需要整型數(shù),就需要用到 parseInt 函數(shù);如果需要浮點(diǎn)型數(shù),就需要用到 parseFloat 函數(shù)。如果我們能夠?qū)⒏袷交瘮?shù)據(jù)的操作封裝起來(lái),那使用起來(lái)一定會(huì)相當(dāng)?shù)姆奖?。為了明確我們的預(yù)期,不妨先給出目標(biāo)組件的使用示例。
Index: {
xml: "<div id='index'>\
<TextBox id='foo'/>\
<TextBox id='bar' format='int'/>\
</div>",
fun: function (sys, items, opts) {
items.foo.value = "hello, world";
items.bar.value = 27.1828;
console.log("foo", items.foo.value);
console.log("bar", items.bar.value);
}
}
此示例實(shí)例化了兩個(gè)組件 Input。組件 Input 允許接收一個(gè) format 參數(shù)作為其靜態(tài)接口輸入,并提供一個(gè)屬性 value 作為其動(dòng)態(tài)輸入輸出接口。format 參數(shù)有三種可能的值:string (默認(rèn))、int 以及 float。這三種值分別對(duì)應(yīng)三種數(shù)據(jù)類型:字符串型、整型和浮點(diǎn)型。屬性 value 根據(jù) format 的值來(lái)進(jìn)行格式化輸入輸出。示例的輸出結(jié)果應(yīng)該會(huì)是下面這樣子:
hello, world
227
目標(biāo)組件的實(shí)現(xiàn)
為了完成上面的目標(biāo)組件,我們先給出一個(gè)文本框的組件框架。
TextBox: {
xml: "<input id='input' type='text'/>",
opt: { format: "string" },
fun: function (sys, items, opts) {
var parse = {"int": parseInt, "float": parseFloat, "string": String}[opts.format];
function getValue() {
// 這里需要獲取 input 的值并根據(jù) opts.format 值選擇適當(dāng)?shù)母袷交瘮?shù),
}
function setValue(value) {
// 這里需要根據(jù) opts.format 值選擇適當(dāng)?shù)母袷交瘮?shù),對(duì) value 進(jìn)行格式化后同去賦值
}
return Object.defineProperty({}, "value", { get: getValue, set: setValue });
}
}
上面關(guān)鍵的地方在于格式化函數(shù)的選取,為了簡(jiǎn)單化,我們采用的是表查詢方式。在組件初始化階段該函數(shù)就已經(jīng)準(zhǔn)備就緒了,上述的 parse 函數(shù)即所需的格式化函數(shù)。不過(guò)需要注意的是,該組件的格式化函數(shù)類型在組件初始化時(shí)就固定了。如果需要可變的格式化函數(shù),你需要對(duì)組件做些修正。好了,下面可以給出完整的的文本框組件了。
TextBox: {
xml: "<input id='input' type='text'/>",
opt: { format: 'string' },
map: { attrs: { input: "disabled value placeholder readonly" } },
fun: function (sys, items, opts) {
var parse = {"int": parseInt, "float": parseFloat, "string": String}[opts.format];
function getValue() {
return parse(sys.input.prop("value"));
}
function setValue(value) {
sys.input.prop("value", parse(value));
}
return Object.defineProperty({}, "value", { get: getValue, set: setValue });
}
}
另外請(qǐng)注意,上面組件添加了部分屬性映射的內(nèi)容,這可以在具體的項(xiàng)目中根據(jù)需要進(jìn)行增刪。
本系列文章基于 xmlplus 框架。如果你對(duì) xmlplus 沒(méi)有多少了解,可以訪問(wèn) www.xmlplus.cn。這里有詳盡的入門文檔可供參考。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- xmlplus組件設(shè)計(jì)系列之網(wǎng)格(DataGrid)(10)
- xmlplus組件設(shè)計(jì)系列之選項(xiàng)卡(Tabbar)(5)
- xmlplus組件設(shè)計(jì)系列之下拉刷新(PullRefresh)(6)
- xmlplus組件設(shè)計(jì)系列之路由(ViewStack)(7)
- xmlplus組件設(shè)計(jì)系列之分隔框(DividedBox)(8)
- xmlplus組件設(shè)計(jì)系列之樹(shù)(Tree)(9)
- xmlplus組件設(shè)計(jì)系列之按鈕(2)
- xmlplus組件設(shè)計(jì)系列之列表(4)
- xmlplus組件設(shè)計(jì)系列之圖標(biāo)(ICON)(1)
相關(guān)文章
javascript面向?qū)ο笾L問(wèn)對(duì)象屬性的兩種方式分析
這篇文章主要介紹了javascript面向?qū)ο笾L問(wèn)對(duì)象屬性的兩種方式分析,實(shí)例分析了直接訪問(wèn)對(duì)象屬性的方式與數(shù)組訪問(wèn)方式,需要的朋友可以參考下2015-01-01
絕對(duì)經(jīng)典的滑輪新聞顯示(javascript+css)實(shí)現(xiàn)
這篇文章主要介紹了絕對(duì)經(jīng)典的滑輪新聞顯示(javascript+css)實(shí)現(xiàn),需要的朋友可以參考下2007-03-03
微信小程序?qū)崿F(xiàn)的繪制table表格功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)的繪制table表格功能,涉及微信小程序數(shù)據(jù)讀取及界面布局相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
深入理解javascript動(dòng)態(tài)插入技術(shù)
這篇文章介紹了javascript動(dòng)態(tài)插入技術(shù),有需要的朋友可以參考一下2013-11-11
Javascript無(wú)參數(shù)和有參數(shù)類繼承問(wèn)題解決方法
這篇文章主要介紹了Javascript無(wú)參數(shù)和有參數(shù)類繼承問(wèn)題解決方法,本文講解了無(wú)參數(shù)類繼承的問(wèn)題和有參類繼承的問(wèn)題,并給出了解決方案,需要的朋友可以參考下2015-03-03
JS判斷非空至少輸入兩個(gè)字符的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了JS判斷非空至少輸入兩個(gè)字符的簡(jiǎn)單實(shí)現(xiàn)方法,需要的朋友可以參考下2017-06-06
JavaScript 動(dòng)態(tài)創(chuàng)建VML的方法
JavaScript 動(dòng)態(tài)創(chuàng)建VML的方法,需要的朋友可以參考下。2009-10-10
JavaScript 中使用Promise.all()方法經(jīng)驗(yàn)技巧詳解
這篇文章主要為大家介紹了JavaScript 中使用Promise.all()方法經(jīng)驗(yàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

