zoukankan      html  css  js  c++  java
  • 插件编写的高可配模式

    在应用一组元素时,通过HTML5数据属性可以在单个元素级别上定制选项,而不需要实例化每个元素让其拥有不同的默认值。

    比如:

    html

    <li class="item-a" >aa</li>
    <li class="item-b" >bb</li>
    

    js

    $(".item-a").draggable({"position": "top-left"});
    $(".item-a").draggable({"position": "bottom-left"});
    

    我们为一组元素li编写一个拖动插件,但是针对每个li,我们需要定制一些选项,这里是position。

    假设这里有100个,那么,我们需要实例化100个带有不同默认值的插件对象。

    更好的办法:

    html

    <li class="item" data-plugin-options="{'position':'top-left'}">aa</li>
    <li class="item" data-plugin-options="{'position':'bottom-left'}">bb</li>

    js

    $("item").draggable();

    是不是简单多了,那么,这种插件如何实现呢,请看:

    ;(function($,window,undefined){
    	var Plugin = function(elem, options){
    		this.elem = elem;
    		this.$elem = $(elem);
    		this.options = options;
    		this.metadata = this.$elem.data("plugin-options");
    	};
    	Plugin.prototype = {
    		defaults:{
    			message:"hello world"
    		},
    		init : function(){
    			this.config = $.extend({}, this.defaults, this.options, this.metadata);
    			this.create();
    			return this;
    		},
    		create:function(){
    
    		}
    	};
    	......
    })(jQuery,window)
    

    上面构造插件的代码跟之前规范构造插件的代码,貌似只差了一行代码,就是获取了元素HTML5自定义属性的值,也就是

    this.metadata = this.$elem.data("plugin-options");

    然后,在初始化时,此属性值会覆盖之前所有的值,因此达到了配置的效果。

    此种模式,也比较重要,angularjs就是利用html的自定义属性实现所需要的功能的。

    加油!

  • 相关阅读:
    [windows菜鸟]C#中调用Windows API参考工具
    [windows菜鸟]C#中调用Windows API的技术要点说明
    [windows菜鸟]Windows API函数大全(完整)
    C#卸载加载到进程里的dll
    C# 防火墙操作之开启与关闭
    CMD命令行管道命令
    linux kernel elv_queue_empty野指针访问内核故障定位与解决
    U-Boot Driver Model领域模型设计
    linux I/O stack cache 强制刷新
    基于lcov实现的增量代码UT覆盖率检查
  • 原文地址:https://www.cnblogs.com/chaojidan/p/4506424.html
Copyright © 2011-2022 走看看