99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

插件擴(kuò)展

2019-04-02 10:51 更新

插件擴(kuò)展通常不包含具體的界面,但可以在界面初始化及關(guān)鍵事件觸發(fā)時(shí)得到通知并執(zhí)行代碼。例如可以通過(guò)監(jiān)聽(tīng)用戶(hù)發(fā)送消息,并在消息發(fā)送之前修改消息的內(nèi)容。

每一個(gè)插件擴(kuò)展需要提供一個(gè)入口模塊文件,在 package.json  文件中通過(guò) main  屬性指定。如果不指定此文件則默認(rèn)使用擴(kuò)展包目錄的 index.js  文件作為主入口模塊文件。擴(kuò)展主入口模塊文件為一個(gè) JavaScript 模塊,當(dāng)喧喧加載完畢時(shí)會(huì)逐個(gè)加載各個(gè)擴(kuò)展的主入口模塊。在擴(kuò)展主入口模塊中可以訪問(wèn)全局?jǐn)U展對(duì)象 global.Xext 。擴(kuò)展主入口模塊應(yīng)該返回一個(gè)對(duì)象,該對(duì)象可以包含如下生命周期函數(shù):

擴(kuò)展主入口模塊

函數(shù)說(shuō)明參數(shù)
onAttach(ext)當(dāng)擴(kuò)展被加載后調(diào)用,此時(shí)可以對(duì)擴(kuò)展進(jìn)行初始化
  • ext  為當(dāng)前被載入的擴(kuò)展對(duì)象

onReady(ext)當(dāng)界面加載完畢時(shí)調(diào)用,此時(shí)擴(kuò)展可以處理與界面相關(guān)操作。
  • ext  為當(dāng)前被載入的擴(kuò)展對(duì)象

onDetach(ext)當(dāng)擴(kuò)展被卸載時(shí)調(diào)用,此時(shí)應(yīng)該將擴(kuò)展使用的資源進(jìn)行釋放,例如銷(xiāo)毀定時(shí)器等
  • ext  為當(dāng)前被載入的擴(kuò)展對(duì)象

onUserLogin(user, error)當(dāng)用戶(hù)登錄完成時(shí)調(diào)用;
  • user  為登錄的用戶(hù)對(duì)象

  • error  當(dāng)?shù)卿浭r(shí)返回的錯(cuò)誤信息

onUserLoginout(user)當(dāng)當(dāng)前登錄的退出登錄時(shí)調(diào)用
  • user  為退出登錄的用戶(hù)對(duì)象

onUserStatusChange(status, oldStatus, user)當(dāng)用戶(hù)狀態(tài)發(fā)生變化時(shí)調(diào)用
  • status  為用戶(hù)新的狀態(tài)代碼

  • oldStatus  為用戶(hù)之前的狀態(tài)代碼

  • user  為當(dāng)前狀態(tài)發(fā)生變化的用戶(hù)對(duì)象

用戶(hù)狀態(tài)代碼含義:

  • unverified - 0 : 未登錄

  • disconnect - 1 : 登錄過(guò),但掉線(xiàn)了

  • logined - 2 : 登錄成功

  • online - 3 : 在線(xiàn)

  • busy - 4 : 忙碌

  • away - 5 : 離開(kāi)

onSendChatMessages(messages, chat, user)當(dāng)用戶(hù)發(fā)送聊天消息時(shí)調(diào)用
  • messages  為用戶(hù)要發(fā)送出去的消息對(duì)象數(shù)組

  • chat  為用戶(hù)發(fā)送消息的會(huì)話(huà)對(duì)象

  • user  為當(dāng)前發(fā)送消息的用戶(hù)的對(duì)象

onReceiveChatMessages(messages, user)當(dāng)用戶(hù)接收到聊天消息時(shí)調(diào)用
  • messages  為用戶(hù)接收到的消息對(duì)象數(shù)組

  • user  為當(dāng)前接收消息的用戶(hù)的對(duì)象

onRenderChatMessageContent(content)當(dāng)在界面上需要轉(zhuǎn)化 markdown 格式的消息文本為 html 時(shí)會(huì)調(diào)用此回調(diào)方法
  • messages  為用戶(hù)接收到的消息對(duì)象數(shù)組

  • user  為當(dāng)前接收消息的用戶(hù)的對(duì)象

MainView當(dāng)作為內(nèi)嵌應(yīng)用時(shí)的 React 實(shí)現(xiàn)的界面主組件

MainView  應(yīng)該返回一個(gè) React 組件類(lèi)或組件函數(shù)。

replaceViews用于配置替換系統(tǒng)內(nèi)置界面組件

replaceViews  為一個(gè)對(duì)象,對(duì)象的鍵名為要替換的組件路徑,鍵值為要用來(lái)替換的 React 組件類(lèi)或組件函數(shù)。

commands擴(kuò)展支持的命令

commands  為一個(gè)對(duì)象,對(duì)象的鍵名為響應(yīng)的命令名稱(chēng),鍵值為命令回調(diào)函數(shù)或者命令定義對(duì)象。

contextMenuCreators為消息增加操作菜單

contextMenuCreators  為一個(gè)菜單生成對(duì)象數(shù)組,對(duì)象數(shù)組為每個(gè)菜單生成對(duì)象。菜單生成對(duì)象包括 match  屬性用于定義匹配的菜單類(lèi)型,creator 屬性用于生成菜單項(xiàng)目的函數(shù)。

urlInspectors網(wǎng)址解釋器,可以將消息中的網(wǎng)址渲染成卡片形式

urlInspectors  為一個(gè)對(duì)象數(shù)組,每個(gè)對(duì)象包含有 test  屬性為正則表達(dá)式用于匹配要解釋的 url 地址,inspector  為回調(diào)函數(shù)(function(url: string) )用于生成 URL 對(duì)應(yīng)的卡片參數(shù)。

下面為一個(gè)簡(jiǎn)單等插件擴(kuò)展主入口模塊示例:

// 從全局?jǐn)U展對(duì)象中引入模塊 
const {   
    app,   
    components,   
    utils 
} = global.Xext; 
// 用于存儲(chǔ)計(jì)時(shí)器標(biāo)志 
let timerTask = null; 
module.exports = {     
    onAttach: (ext) => {         
        // 擴(kuò)展加載完畢了, 此時(shí)設(shè)置一個(gè)計(jì)時(shí)器,在加載完成 10 秒中之后在界面上顯示一個(gè)消息         
        timerTask = setTimeout(() => {             
            alert('擴(kuò)展加載完成已經(jīng) 10 秒鐘了,剛剛加載等擴(kuò)展名稱(chēng)是:' + ext.displayName);         
        });     
     },     
     
     onDetach: (ext) => {         
         // 擴(kuò)展將被卸載,此時(shí)應(yīng)該清理計(jì)時(shí)器         
         clearTimeout(timerTask);         
         timerTask = null;     
     },     
     onUserLogin: (user, error) => {         
         // 當(dāng)用戶(hù)登錄時(shí)在此處可以進(jìn)行相關(guān)操作,下面以顯示當(dāng)前登錄等結(jié)果和用戶(hù)名為例         
         if (user && !error) { // 表示登錄成功             
             components.Modal.alert('用戶(hù)登錄成功了,用戶(hù)名稱(chēng)是:' + user.displayName);         
         } else {             
             components.Modal.alert('用戶(hù)登錄失敗了。');         
         }     
     }, 
}

應(yīng)用的插件機(jī)制

當(dāng)一個(gè)擴(kuò)展類(lèi)型為 app (應(yīng)用)時(shí),同樣可以在 package.json  文件中使用 main  屬性指定一個(gè)主入口模塊文件,從而使得一個(gè)應(yīng)用擴(kuò)展具備插件擴(kuò)展的機(jī)制。同理,也可以將此方式理解為一個(gè)包含應(yīng)用界面的插件。

replaceViews :界面替換機(jī)制

在主入口模塊中可以使用 replaceViews  字段指定一個(gè)對(duì)象來(lái)替換喧喧默認(rèn)的界面組件,這些組件在  /app/views 目錄下。replaceViews  對(duì)象的鍵名為要替換的組件路徑,鍵值為要用來(lái)替換的 React 組件類(lèi)或組件函數(shù)。通過(guò)界面替換機(jī)制,可以使用插件的形式來(lái)定制喧喧的界面,例如將官方的登錄界面替換為自己的實(shí)現(xiàn)。

下面的例子將展示使用自定義的 React 組件來(lái)替換官方的用戶(hù)頭像組件。這樣可以將官方的圓形用戶(hù)頭像替換為方形的頭像。更加詳細(xì)的代碼參考官方例子  replace-user-avatar-example。

// 主入口文件 index.js 
const UserAvatar = require('./user-avatar'); 
module.exports = {     
    replaceViews: {         
        'common/user-avatar': UserAvatar,     
    } 
};
// user-avatar.js 文件 
// 從全局?jǐn)U展對(duì)象中引入模塊 
const {     
    views,     
    components,     
    utils,     
    nodeModules, 
} = global.Xext; 
const {React} = nodeModules; 
const {PropTypes, Component} = React; 
const {StatusDot} = views.common; 
const {Avatar, Emojione} = components; 
const {HtmlHelper} = utils; 
let todayTime = new Date(); 
todayTime.setHours(0, 0, 0, 0); 
todayTime = todayTime.getTime();
 
class UserAvatar extends Component {     
    render() {         
        const user = this.props.user;         
        const className = this.props.className;         
        const showStatusDot = this.props.showStatusDot;    
             
        // 使用 react 形式返回新的用戶(hù)頭像     
    } 
} 
UserAvatar.propTypes = {     
    user: PropTypes.object,     
    className: PropTypes.string,     
    showStatusDot: PropTypes.bool, 
};
UserAvatar.defaultProps = {     
    className: null,     
    showStatusDot: null,     
    user: null, 
}; 
module.exports = UserAvatar;


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)