最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

xmlplus組件設(shè)計系列之列表(4)

 更新時間:2017年04月26日 12:00:55   作者:qudou  
xmlplus 是一個JavaScript框架,用于快速開發(fā)前后端項目。這篇文章主要介紹了xmlplus組件設(shè)計系列之列表,具有一定的參考價值,感興趣的小伙伴們可以參考一下

列表組件是極其常用的一類組件,是許多視圖組件系統(tǒng)的必須包含的。列表可以做的很簡單,只顯示簡潔的內(nèi)容。列表也可以做的很復(fù)雜,用于展示非常豐富的內(nèi)容。

組成元素

列表離不開列表項以及包含列表項的容器。下面是最簡單的列表組件,它包含一個列表項組件 Item 以及一個列表項容器組件 List。

Item: {
 xml: "<li id='item'/>"
},
List: {
 xml: "<ul id='list'/>"
}

此列表組件盡管簡單,但所構(gòu)建的框架為我們的繼續(xù)擴展奠定了基礎(chǔ)。

動態(tài)操作

如上定義的列表組件的最基本的用法如下所示。這種用法與原生列表標簽的用法沒什么區(qū)別。我們將進行做進一步的改造。

Example: {
 xml: "<List id='example'>\
  <Item>Item 1</Item>\
  <Item>Item 2</Item>\
  </List>"
}

列表組件普遍包含添加、刪除以及修改這三種操作。為簡單起見,不妨先來實現(xiàn)這些操作。由于我們定義的列表項足夠的簡單,所以這里不再定義新的操作接口,而直接使用系統(tǒng)接口。

Example: {
 xml: "<div id='example'>\
  <List id='list'/>\
  <button id='append'>append</button>\
  <button id='remove'>remove</button>\
  <button id='modify'>modify</button>\
  </div>",
 fun: function (sys, items, opts) {
 sys.append.on("click", function() {
  sys.list.append("Item").text("Item 1");
 });
 sys.remove.on("click", function() {
  sys.list.first() && sys.list.first().remove();
 });
 sys.modify.on("click", function() {
  sys.list.first() && sys.list.first().text("Item 2");
 });
 }
}

該示例使用列表的系統(tǒng)函數(shù) append 來追加列表項,并使用列表項的系統(tǒng)函數(shù) remove 來移除列表項,同時還使用列表項的系統(tǒng)函數(shù) text 來修改列表項的數(shù)據(jù)。

由于上面的列表項所包含的是簡單的文本數(shù)據(jù),所以上面示例使用 text 函數(shù)來操作數(shù)據(jù)是適合的?,F(xiàn)在給出一個包含較復(fù)雜數(shù)據(jù)的列表項,該列表項額外定義了數(shù)據(jù)操作接口。

Item: {
 xml: "<li id='item'>\
  <span id='color'>red</span>
  <span id='shape'>square</span>
  </li>",
 fun: function (sys, items, opts) {
 function getValue() {
  return {color: sys.color.text(), shape: sys.shape.text()};
 }
 function setValue(obj) {
  sys.color.text(obj.color);
  sys.shape.text(obj.shape);
 }
 return Object.defineProperty({}, "data", { get: getValue, set: setValue});
 }
}

下面是包含新列表項的列表操作的一個示例。其中對于組件的追加與刪除還可以使用系統(tǒng)提供的函數(shù),但對于數(shù)據(jù)的獲取與修正就只能使用新定義的接口了。

Example: {
 xml: "<div id='example'>\
  <List id='list'/>\
  <button id='append'>append</button>\
  <button id='remove'>remove</button>\
  <button id='modify'>modify</button>\
  </List>",
 fun: function (sys, items, opts) {
 sys.append.on("click", function() {
  sys.list.append("Item");
 });
 sys.remove.on("click", function() {
  sys.list.first() && sys.list.first().remove();
 });
 sys.modify.on("click", function() {
  sys.list.first() && items.list.first().data = {color: "blue", shape: "rectangle"};
 });
 }
}

對列表項接口的定義沒有什么特別的要求,比如一定要使用 setValue 和 getValue 之類。這取決于具體的場景,根據(jù)需要靈活選擇。

使用第三方列表組件

如今市面上已經(jīng)有了種種功能豐富的列表組件,我們可以通過二次封裝為我所用。這里結(jié)合 JQuery 帶有排序功能的列表組件來說明如何操作。

首先對列表項進行封裝,因為這個列表項實在太長了。注意要引出數(shù)據(jù)操作接口。

Item: {
 xml: "<li class='ui-state-default'><span class='ui-icon ui-icon-arrowthick-2-n-s'/><span id='data'/></li>",
 map: { appendTo: "data" },
 fun: function (sys, items, opts) {
 return { data: sys.data.text };
 }
}

其次,定義下列表項的容器組件,該容器組件主要封裝 JQuery 的列表初始化代碼,這里定義了該列表為可排序但不可選。

List: {
 css: "#list{ list-style-type: none; margin: 0; padding: 0; width: 60%; }\
  #list li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }\
  #list li span { position: absolute; margin-left: -1.3em; }",
 xml: "<ul id='list'/>",
 fun: function (sys, items, opts) {
 var elem = this.elem();
 $(elem).sortable();
 $(elem).disableSelection();
 }
}

最后我們來看看如何使用該列表組件。該示例的使用與前面沒什么不同,但功能與表現(xiàn)可就大不一樣了。

Example: {
 xml: "<List id='example'>\
  <Item>Item 1</Item>\
  <Item>Item 2</Item>\
  <Item>Item 3</Item>\
  </List>"
}

優(yōu)化

如果你的列表有頻繁更新數(shù)據(jù)的要求,必然會產(chǎn)生頻繁的列表項的增刪操作,這可能會帶來不好的應(yīng)用體驗。下面給出一個可行的優(yōu)化方案,該方案在官方文檔的 優(yōu)化 章節(jié)中已出現(xiàn)過。

List: {
 xml: "<ul id='list'/>",
 fun: function (sys, items, opts) {
 function setValue(array) {
  var list = sys.list.children();
  for ( var i = 0; i < array.length; i++ )
  (list[i] || sys.list.append("Item")).show().text(array[i]);
  for ( var k = i; k < list.length; k++ )
  list[k].hide();
 }
 return Object.defineProperty({}, "value", { set: setValue });
 }
}

對于復(fù)雜的列表項,重新創(chuàng)建的代價是巨大的。所以此優(yōu)化方案盡可能地復(fù)用已有的列表項,非必要時只刷新數(shù)據(jù)而不是刪除并重建新的列表項,只有當已有的列表項不夠用時才創(chuàng)建新的列表項。

本系列文章基于 xmlplus 框架。如果你對 xmlplus 沒有多少了解,可以訪問 www.xmlplus.cn。這里有詳盡的入門文檔可供參考。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript bind綁定函數(shù)代碼

    javascript bind綁定函數(shù)代碼

    bind函數(shù),顧名思義,用于為調(diào)用函數(shù)綁定一個作用域,因為this很容易跟丟它原來所在的作用域,直接指向頂層的window對象。
    2010-01-01
  • 基于iScroll實現(xiàn)下拉刷新和上滑加載效果

    基于iScroll實現(xiàn)下拉刷新和上滑加載效果

    這篇文章主要為大家詳細介紹了基于iScroll實現(xiàn)下拉刷新和上滑加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 純js和css實現(xiàn)漸變色包括靜態(tài)漸變和動態(tài)漸變

    純js和css實現(xiàn)漸變色包括靜態(tài)漸變和動態(tài)漸變

    用javascript實現(xiàn)一下所謂的動態(tài)漸變,考慮動態(tài)原因就不上圖了,我來簡單介紹下思路
    2014-05-05
  • 基于js對象,操作屬性、方法詳解

    基于js對象,操作屬性、方法詳解

    下面小編就為大家?guī)硪黄趈s對象,操作屬性、方法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Boostrap中柵格布局的實現(xiàn)

    Boostrap中柵格布局的實現(xiàn)

    這篇文章主要為大家詳細解析了Boostrap 柵格布局,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2017-01-01
  • JS event使用方法詳解

    JS event使用方法詳解

    event代表事件的狀態(tài),例如觸發(fā)event對象的元素、鼠標的位置及狀態(tài)、按下的鍵等等。 event對象只在事件發(fā)生的過程中才有效。
    2008-04-04
  • 自定義require函數(shù)讓瀏覽器按需加載Js文件

    自定義require函數(shù)讓瀏覽器按需加載Js文件

    可能很多人看到這個題目就會想到LABjs、RequireJS、SeaJS... 這些庫,但無奈小編沒用過這些庫,什么 AMD 、CMD 哪來那么多術(shù)語... 前端的庫太多了,要看各種亂七八糟的文檔,好難啊,還不如自己寫一個庫呢。于是就有了這文章,有需要的朋友們下面來一起學習學習吧。
    2016-11-11
  • 簡單談?wù)刟xios中的get,post方法

    簡單談?wù)刟xios中的get,post方法

    下面小編就為大家?guī)硪黄唵握務(wù)刟xios中的get,post方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • JavaScript設(shè)計模式之單例模式

    JavaScript設(shè)計模式之單例模式

    單例模式的定義是:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • JavaScript九九乘法口訣表的簡單實現(xiàn)

    JavaScript九九乘法口訣表的簡單實現(xiàn)

    這篇文章主要介紹了JavaScript乘法口訣表的簡單實現(xiàn),文中給出了詳細的示例代碼,這樣對大家的理解和學習更有幫助,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10

最新評論

洞口县| 时尚| 浦县| 志丹县| 瓮安县| 天水市| 高淳县| 明水县| 册亨县| 饶平县| 孝义市| 东乌珠穆沁旗| 长春市| 香河县| 甘泉县| 南丰县| 青神县| 西丰县| 昆明市| 黑龙江省| 湘潭县| 伊宁县| 延吉市| 安化县| 古浪县| 静宁县| 泾源县| 丹东市| 福清市| 荣成市| 松江区| 开封市| 绵竹市| 老河口市| 桐城市| 栖霞市| 昌宁县| 共和县| 阿拉尔市| 沂源县| 南汇区|