• jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法


    转自:http://www.cnblogs.com/sunjie9606/archive/2012/09/13/2683636.html

    现象:

           AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等

    处理方法:

          在html片段加载完毕后使用

    Js代码  
    1. $.parser.parse(context)  

         即可重新渲染。

    实现原理:

        首先附上jquery.parser.js的源码

    Js代码  
    1. (function($){  
    2.     $.parser = {  
    3.         auto: true,  
    4.         plugins:['linkbutton','menu','menubutton','splitbutton','layout',  
    5.                  'tree','window','dialog','datagrid',  
    6.                  'combobox','combotree','numberbox','validatebox',  
    7.                  'calendar','datebox','panel','tabs','accordion'  
    8.         ],  
    9.         parse: function(context){  
    10.             if ($.parser.auto){  
    11.                 for(var i=0; i<$.parser.plugins.length; i++){  
    12.                     (function(){  
    13.                         var name = $.parser.plugins[i];  
    14.                         var r = $('.easyui-' + name, context);  
    15.                         if (r.length){  
    16.                             if (r[name]){  
    17.                                 r[name]();  
    18.                             } else if (window.easyloader){  
    19.                                 easyloader.load(name, function(){  
    20.                                     r[name]();  
    21.                                 })  
    22.                             }  
    23.                         }  
    24.                     })();  
    25.                 }  
    26.             }  
    27.         }  
    28.     };  
    29.     $(function(){  
    30.         $.parser.parse();  
    31.     });  
    32. })(jQuery);  

       框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染

    Js代码  
    1. $.parser.auto   //是否自动进行渲染  
    2. $.parser.plugins  //包含目前EasyUI框架中所有的插件名称  
    3. $.parser.parse(context)  
    4. //context  为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档  
    5. //渲染对象为: class="easyui-pluginName"的元素

    当AJAX异步获取了HTML代码之后,这一段代码是包含JQuery EasyUI 的属性和样式的,这时这些属性和样式并不会生效。这里说说解决方案

    我们先来了解页面在刷新或打开时JQuery EasyUI都干了些什么:

    在加载完HTML的时候,JQuery EasyUI 会找class=“easyui-xxxx”的样式来初始化JQuery EasyUI 控件,搜索JQuery EasyUI 混淆之后的源代码,找到这么一段:

    (function(Extra open brace or missing close brace.parser={auto:true,onComplete:function(_142){
    },plugins:["linkbutton","menu","menubutton","splitbutton","tree","combobox","combotree","numberbox","validatebox","numberspinner","timespinner","calendar","datebox","layout","panel","datagrid","tabs","accordion","window","dialog"],parse:function(_143){
    var aa=[];
    for(var i=0;i<Misplaced &(function(){
    if(!window.easyloader&&Extra open brace or missing close brace.parser.parse();
    }
    });
    })(jQuery);

    当看完之后$.parser.parse();这一句不就是重绘JQuery EasyUI 控件的么。当执行这一句话的时候JQuery EasyUI 会对整个页面的DOM进行解析,效率是比较慢的。当然我们AJAX异步获取的仅仅是一段HTML,没有必要对整个页面进行解析。

    当我们异步获取来的HTML放入一个容器里,比如这样

    $('#xxxx').html(异步获取回来的内容) ,我们在解析这一段异步获取回来的HTML中的JQuery EasyUI控件时,可以这样做:

    .parser.parse(('#xxxx'));

    这样就只解析$('#xxxx')内部的HTML中的JQuery EasyUI控件。

    可以使用$.parser.parse();这个方法进行处理;

    例如:
     
    $.parser.parse();
    表示对整个页面重新渲染,渲染完就可以看到easyui原来的样式了;
     
    var targetObj = $("<input name='mydate' class='easyui-datebox'>").appendTo("#id");
    $.parser.parse(targetObj);
    表示重新渲染某个特定的组件。

    此测试已经通过,此方法很可靠。

  • 相关阅读:
    ECNU-2574 Principles of Compiler
    C++调用C#生成的DLL文件的各种问题
    EOJ-1708//POJ3334
    Linux---弹球游戏
    dotfiles管理
    js基础的知识整理
    关于css的一些知识点整理
    HTML5 aria- and role
    JS获取非行间样式
    Javascript中的数组去重-indexof方法
  • 原文地址:https://www.cnblogs.com/exmyth/p/4564814.html
Copyright © 2020-2023  润新知