zoukankan      html  css  js  c++  java
  • 组件的插件开发

    一、介绍:

    插件:定义为组件的扩展或者插件的扩展,可以针对特定组件和版本开发的扩展插件,也可以针对已有的插件进行开发扩展插件。


    二、插件开发约定:

    1. 插件所需要的model数据,如果是组件没有的,插件自身通过扩展服务端api来请求数据,与组件无关系。
    2. 如果组件由一些事件切换导致数据刷新时(如查询时间改变了),由插件自身负责监听切换时间的事件,先缓存在插件内,然后到组件的render事件触发时,再通过缓存的条件请求新的数据,刷新插件信息。
    3. 组件的插件针对所有加载的组件有效,如页面加载了五个曲线控件,插件同时对这5个曲线控件有效,暂时不支持只对2个有效,其他3个保留原样。
    4. 建议插件不修改原组件的DOM结构,如:删除列(建议做隐藏该列)、修改列值(建议增加新列并隐藏原列)等。
    5. 一个插件只能扩展一个组件。

    三、组件内部代码示例:

      以overlay组件为例:

    var backbone = require('backbone');
    
    var overlay = backbone.View.extend({
    
         render: function(){
    
               //render之前触发事件
               overlay.trigger(overlay.triggerList.beforeRender, this);
    
               //overlay模块内的标签输出代码编写
               // some code
    
    
               //render之后触发事件
               overlay.trigger(overlay.triggerList.afterRender, this);
         }
    }, backbone.Events);  //给类绑定backbone.Events事件,静态参数
    
    //外部可访问事件列表
    overlay.triggerList = {
        afterRender: 'Overlay:AfterRender',
        beforeRender: 'Overlay:BeforeRender'
    };

    overlay-plugin 插件示例代码

    var overlay = require('overlay');
    var backbone = require('backbone');
    
    var overlayPlugin = backbone.View.extend({
    
         initialize: function(options){
    
               var that = this;
    
               //订阅组件render事件
               overlay.on(overlay.triggerList.afterRender, function(obj){
    
                    that.render(obj);
               });
    
               //订阅组件render事件
               overlay.on(overlay.triggerList.beforeRender, function(obj){
    
                    that.render(obj);
               });
         },
    
         render: function(obj){
    
               //针对组件的dom进行操作,实现组件的功能
         },
    
         dispose: function(){
    
                //移除事件
                overlay.off(overlay.triggerList.afterRender);
                overlay.off(overlay.triggerList.beforeRender);
    
                //清除组件dom元素
                $('.overlayPlugin').remove();
          }
    
    }, backbone.Events);
    
    //外部可访问事件列表
    overlayPlugin.triggerList = {
        afterRender: 'OverlayPlugin:AfterRender',
        beforeRender: 'OverlayPlugin:BeforeRender'
    }

    插件模块的package.json:

    {
        "name": "overlay-plugin",
        "version": "0.1.0",
        "description": "全屏窗体覆盖层插件,扩展于overlay",
        "keywords":["基础界面模块","对话框", "插件"], //keywords中必须有"插件"两个字
        "author": "zs <zs@strongsoft.net>",  
        "dependencies": {
           "jquery": "1.7.2",
           "underscore": ">1.3.3",
           "backbone": "1.2.3-2.3.4",
           "async": "~1.0.0"
        },
        "output": { 
           "overlay-plugin.js": "."
         },
         "hostModule": {    //用于描述该插件所扩展的组件,一个插件只能扩展一个组件
             "name": "overlay",
             "version": "~0.1"
         }
    }

    插件加载:

    插件加载通过seajs.config函数进行配置,通常存放在seajs-helper.js中,此种加载方式仅在对应组件被seajs加载时,插件模块才会被加载。

    seajs.config({
        "preload": [ "plugin-json", "plugin-text", "plugin-addons" ],
        "alias": {
            "overlay": "overlay/0.1.21/overlay",
            "overlay-plugin": "overlay-plugin/0.1.8/overlay-plugin",
        },
        "addons": {
            "overlay/0.1.21/overlay": [ "overlay-plugin/0.1.0/overlay-plugin" ]
        }
    });

    其中:

    1. preload 必须加入 "plugin-addons"这个项
    2. 增加 addons 属性,用于描术每个组件的相应插件id
    3. 所需插件必须通过 spm install 安装

    spm安装文件配置

    项目通过配置文件进行安装时,如果有用到插件需要配置插件节点,如下:

    // 新增 plugins,数组结构
    plugins: [{
      "name": "overlay-pulgin",
      "version": "~0"
    }, {
      "name": "overlay2-pulgin",
      "version": "~0"
    }]

    最后,写好的组件的插件如何集成到系统上:

    1)在系统上(的ZhswEmergency/web/update的)config.json中进行配置:

        写一个:

    "plugins": [{
            "name": "tilemap-around-plugin",
            "version": "~0"
        }],

    2)运行之后,在系统上的 sea-modules/seajs-helper.js 中会出现以下:

      (自动)

    seajs.config({
        "preload": [ "plugin-json", "plugin-text", "plugin-addons" ],
        "alias": {
            "xx-homepage": "xx-homepage/0.1.8/xx-homepage",
            "yy-index": "yy-index/0.1.32/yy-index",
        },
        "debug": true,
        "addons": {
            "base-map-popup-box": [ "base-map-popup-box-detail-plugin/0.1.17/base-map-popup-box-detail-plugin" ],
            "tilemap": [ "tilemap-around-plugin/0.1.11/tilemap-around-plugin" ]
        },  //这个tilemap-around-plugin 就是系统需要用到的插件了呀~
  • 相关阅读:
    学习笔记
    学习笔记
    web前端初步学习心得
    Redis学习 命令执行
    Redis笔记 info命令
    UNIX编程 GetAddrInfo笔记
    UNIX编程 TCP基础读写笔记
    日本語自然言語処理
    日本語助詞と助動詞
    UNIX编程 I/O多路转接笔记
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/6253376.html
Copyright © 2011-2022 走看看