使用CdList輕松構建列表應用

在進行 cms婉烟,用戶中心開發(fā)時遇到了很多列表展示的需求鼻弧。無非就是:篩選设江、排序、分頁等功能的組合攘轩,同時還需要支持 history 記錄(前進叉存、后退等)

為了提升組內同學開發(fā)效率撑刺, CdList 便誕生了:

  1. 分頁鹉胖、排序、篩選够傍、日期甫菠、搜索等作為插件進行創(chuàng)建

      var pageInstance = new CdList.addons.Pagination({...})
    
  2. 對任意插件的操作,都會觸發(fā)回調冕屯,由開發(fā)者自行拼接列表 API 請求地址

  getUrl: function (data) {
    console.log(data);
    return '/ajax.json?' + $.param(data)
  }
  1. 寫好渲染每行數(shù)據(jù)的模板寂诱,之后的一切交給 CdList 幫你搞定

  2. 借助 History Api 列表的數(shù)據(jù)為異步請求,并且支持 url 定位(產(chǎn)品需求進入頁面后直接選中篩選項目的某一項安聘,可通過 url 進行控制)

所有開發(fā)資源

快速開始

1. 安裝

  • 非 webpack 構建:
    1. 進入 git repo痰洒,下載 lib/cdlist.js 即可
    2. 如需要默認樣式引入lib/cdlist.css
  • webpack 構建:
    1. npm install cdlist --save
    2. 在 js 文件中
    var CdList = require('cdlist');
    

2. 創(chuàng)建列表應用

下面使用高德 API 創(chuàng)建示例,講解使用方法浴韭,戳此鏈接查看DEMO

  1. 選擇要使用的插件
BF4E436B-E2A7-49CC-99DD-B720C3D4FC48.png

這個實例中需要創(chuàng)建 Search丘喻、PaginationFilter三個插件點擊可獲得完整api

創(chuàng)建插件的創(chuàng)建代碼如下:

// 初始化搜索插件
var search = new CdList.addons.Search({
  historyEnable: 1,
  placeholder: '輸入您想查詢的內容'
});
// 初始化分頁插件
var pg = new CdList.addons.Pagination({
  historyEnable: 1,
  onChange: function () {
    $('body, html').animate({
      scrollTop: $('.cdlist-container').offset().top
    }, 300);
  },
  getSetting: function (json) {
    return {
      total: parseInt(json.count / 13)
    }
  }
});
// 初始化篩選插件
var filter = new CdList.addons.Filter({
  historyEnable: 1,
  line: 1,
  filters: [
    {
      label: '服務類型:',
      name: 'types',
      datas: [
        { name: '不限', value: '' },
        { name: '餐飲服務', value: '05' },
        { name: '汽車服務', value: '01' },
        { name: '購物服務', value: '06' },
        { name: '醫(yī)療服務', value: '09' },
      ]
    },
    {
      label: '城市編碼:',
      name: 'city',
      datas: [
        { name: '北京', value: 'beijing' },
        { name: '上海', value: 'shanghai' },
        { name: '深圳', value: 'shenzhen' },
        { name: '廣州', value: 'guangzhou' },
      ]
    }
  ]
});
  • historyEnable 標識此插件是否記錄 history(是否可以通過前進念颈、后退控制)
  • Pagination.onChange 為分頁插件操作后的回調
  • Pagination.getSetting 需要返回總頁數(shù)泉粉,其參數(shù)為首次請求 api 的數(shù)據(jù)
  • Filter.line 設置是否以 ul、li 形式展示篩選插件、否則將展示為 select 結構
  • Filter.filters 配置篩選數(shù)據(jù)
  1. 創(chuàng)建列表實例

列表實例承載了:數(shù)據(jù)請求嗡靡、模板載入跺撼、應用插件等功能。

  1. 插件本身沒有任何作用讨彼,只有掛載到某個列表實例才會展示
  2. 所有對插件的操作都會觸發(fā) getUrl 回調歉井,其參數(shù)為每個插件當前的選中狀態(tài),開發(fā)者需要自行構建請求 api
  3. 如果為 json api 可以直接發(fā)送 get 請求哈误;如果想自定義請求方式需要在getAjaxData 回調中寫自己 ajax 請求哩至,并返回實例
// 創(chuàng)建 cdlist 表格應用,整合所有插件 
var cdList = window.cdlist = new CdList({
  ulClass: 'amap-list',
  addons: [search, filter, pg],

  getUrl: function (data) {
    var param = {
      keywords: data.search,
      types: data.filter.types,
      city: data.filter.city,
      page: data.pagination + 1,
      key: '6a8449ec9b2da3fcff320383bfc69e92',
      extensions: 'all',
      offset: 13
    };
    return 'https://restapi.amap.com/v3/place/text?' + $.param(param);
  },

  empty: function () {
    return '<div class="amap-list-empty">抱歉黑滴,沒有您查找的 POI </div>'
  },

  getAjaxData: function (url) {
    return $.ajax({
      url: url,
      dataType: 'jsonp'
    });
  },

  rows: function (item) {
    var html = ['<li>',
      '<div class="img" style="background-image:url(' + (item.photos[0] && (item.photos[0].url + '?operate=merge&w=160&h=150&position=5') || DEFAULT_IMAGE) + ')"/>',
      '<div class="item-main">',
        '<div class="item-name">' + item.name + '</div>',
        '<div class="item-address">詳細地址' + item.address + '</div>',
      '</div>',
    '</li>'].join('');

    return html;
  },

  getRowsData: function (json) {
    return json.pois;
  }
}, '#cdlist-wrap');
  • new CdList 第一個參數(shù)為配置項憨募,第二個參數(shù)為列表容器
  • ulClass 未列表增加自定義類名
  • getUrl 回調返回列表 api 請求地址
  • getAjaxData 進行 jsonp 的請求
  • getRowsData 返回請求接口的列表數(shù)據(jù)
  • rows 返回每一行的渲染模板
  • empty 返回如果沒有數(shù)據(jù)時的替代內容

更詳細配置戳API

  1. 讓他跑起來
  cdList.getList();

就這么簡單一共 99 行代碼,構建了豐富的列表應用袁辈,再也不用擔心PM的各種列表需求了

設計思路

  1. 每個插件獨立配置菜谣,由開發(fā)者選擇使用,并易于擴展自定義插件晚缩。
  2. 插件之間沒有直接交互尾膊,都通過CdList 實例派發(fā)的事件進行控制
  3. CdList 實例提供 History 記錄、更改功能荞彼,并將其派發(fā)到每個插件中
CdList 架構.png

場景

適合什么
  1. 后臺系統(tǒng)的列表展示需求
  2. 用戶端對樣式冈敛、自定義操作要求不高的列表應用
  3. 數(shù)據(jù)的排序、搜索鸣皂、分類都是由 api 接口提供
不適合什么
  1. 數(shù)據(jù)的排序抓谴、搜索、分類為前端邏輯
  2. 交互寞缝、樣式自定義很復雜的列表(電商平臺的商品列表)

后續(xù)計劃

  1. 移除 jQuery 的依賴
  2. 豐富更多的插件
  3. 插件提供的使用方法癌压、事件還需補充
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荆陆,隨后出現(xiàn)的幾起案子滩届,更是在濱河造成了極大的恐慌,老刑警劉巖被啼,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帜消,死亡現(xiàn)場離奇詭異,居然都是意外死亡浓体,警方通過查閱死者的電腦和手機泡挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來命浴,“玉大人粘衬,你說我怎么就攤上這事湘纵“柘模” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵锥惋,是天一觀的道長跪腹。 經(jīng)常有香客問我褂删,道長,這世上最難降的妖魔是什么冲茸? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任屯阀,我火速辦了婚禮,結果婚禮上轴术,老公的妹妹穿的比我還像新娘难衰。我一直安慰自己,他們只是感情好逗栽,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布盖袭。 她就那樣靜靜地躺著,像睡著了一般彼宠。 火紅的嫁衣襯著肌膚如雪鳄虱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天凭峡,我揣著相機與錄音拙已,去河邊找鬼。 笑死摧冀,一個胖子當著我的面吹牛倍踪,可吹牛的內容都是我干的。 我是一名探鬼主播索昂,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼建车,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了楼镐?” 一聲冷哼從身側響起癞志,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎框产,沒想到半個月后凄杯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡秉宿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年戒突,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片描睦。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡膊存,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情隔崎,我是刑警寧澤今艺,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站爵卒,受9級特大地震影響虚缎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜钓株,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一实牡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轴合,春花似錦创坞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奔坟,卻和暖如春携栋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咳秉。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工婉支, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澜建。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓向挖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炕舵。 傳聞我的和親對象是個殘疾皇子何之,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)咽筋,斷路器溶推,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情奸攻,實現(xiàn)同樣的效果;這時候需要使用工廠模式蒜危。簡單...
    舟漁行舟閱讀 7,718評論 2 17
  • 1.JQuery 基礎 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設計者無需花費時間糾纏JS復雜的高級特性睹耐。 1....
    LaBaby_閱讀 1,162評論 0 1
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,073評論 0 7
  • AngularJS是什么辐赞?AngularJs(后面就簡稱ng了)是一個用于設計動態(tài)web應用的結構框架。首先硝训,它是...
    200813閱讀 1,588評論 0 3