Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2057|回复: 3

javascript常用方法

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
发表于 2016-3-22 11:34:21 | 显示全部楼层 |阅读模式
本帖最后由 hechengjin 于 2016-3-22 11:38 编辑

数组合并,修改数组内容
  1. let messageIDs = []
  2.     let ranges = GetWinControl().selection.getRanges()
  3.     for (let range of ranges) {
  4.       for (let row = range.firstIndex; row <= range.lastIndex; row++) {
  5.         let messageItem = gMailList.getItem(row)
  6.         if (gMailList.threaded) {
  7.           Array.prototype.push.apply(messageIDs, messageItem.messageIDs)
  8.         } else {
  9.           messageIDs.push(messageItem.primaryKey)
  10.         }
  11.       }
  12.     }
  13.     let messageURIs = messageIDs.map((messageID) => {
  14.       let messageItem = gMailList.memoryDatabase.getMessageItem(messageID)
  15.       let messageURI = getMessageURI(messageItem.folderID, messageItem.messageKey)
  16.       return messageURI
  17.     })
复制代码
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
 楼主| 发表于 2016-3-26 16:44:57 | 显示全部楼层
根据class查询元素集
<div st class="firemail-item">
<div id="messageListItem" key="xxx"  style="position:absolute;left:0px;right:0px;">...</div>
</div>...

let items = listView.rootElement.querySelectorAll('.firemail-item:hover #messageListItem')
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
 楼主| 发表于 2016-3-26 16:56:52 | 显示全部楼层
延后执行方法(防止频繁刷新等)
1.Promise
2.setTimeout(code,millisec)   millisec可设置为0

setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
 楼主| 发表于 2016-3-26 17:29:34 | 显示全部楼层
本帖最后由 hechengjin 于 2016-3-26 19:18 编辑

事件相关处理方法
1.钩子类似用法 ----后面的默认逻辑照常执行
  1. let saveWindowOnSize = window.onresize
  2.   window.onresize = (e) => {
  3.     if (window.gLeftPaneControl.type !== 1) { // window.gLeftPaneControl.MAIL
  4.       saveWindowOnSize.call(window, e)
  5.       return
  6.     }
  7.     let newRootElementHeight = getElementHeight(this.rootElement)
  8.     if (this.rootElementHeight !== newRootElementHeight) {
  9.       this.rootElementHeight = newRootElementHeight
  10.       let event = document.createEvent('HTMLEvents')
  11.       event.initEvent('resize', true, true)
  12.       this.rootElement.dispatchEvent(event)
  13.     }
  14.     saveWindowOnSize.call(window, e)
  15.   }
  16. }
复制代码
2.函数重写----后面的默认逻辑不再调用

3.使用容器加入所有监听对象,循环调用-----多观察者支持

4.触发事件---全局事件,需要的就接收处理
  1. let event = document.createEvent('HTMLEvents')
  2. event.initEvent('resize', true, true)
  3. this.rootElement.dispatchEvent(event)
复制代码
5.源对象[source]和接收器[sink]原理
重点理解下类似COM(XPCOM)中的可连接对象,即源对象[source]和接收器[sink]原理,源对象与接收器在程序中的应用,及如何处理多通道的情况。
多通道:A收听B的微博,单通道,只要A告诉B就可以了
A收听B,同时收听C和D,这时,A要分别与B、C、D打交道,比较繁琐,这时出现S,它统一管理B、C、D的变化通知,A只要和S说一下就好了。当然要跟S说清楚,你到时要收听的具体对象(flags标志值)。


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-3-29 20:17 , Processed in 0.060364 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表