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


     

    博客分类:

    现象:

           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()对整个文档进行渲染

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

    我们之所以在页面中,只要书写相应easyui的class,Easyui就能成功渲染页面,这是因为解析器在默认情况下,parser会在文档装载完成的时候($(document).ready)被调用一次,而且是渲染整个页面。

    然而当页面装载完后,如果用javascript生成的DOM中包含了Easyui支持控件的class,比如说,用javascript生成了以下代码:

    <a id="tt" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">easyui</a>

     虽然页面上有这样的DOM了,但是没有被渲染为Easyui的linkbutton插件,原因是Easyui并不会一直监听页面,所以不会主动渲染,这时候就需要手工调用Easyui的parser进行解析了。

    手工调用需要注意以下几点:

    解析目标为指定DOM的所有子孙元素,不包含这个DOM自身:

    比如上面代码生成的HTML,id="tt"是我们想要的LinkButton,像下面代码去手工解析的话是得不到你想要的结果的:

     $.parser.parse($('#tt'));

    道理很简单,parser只渲染tt的子孙元素,并不包括tt自身,而它的子孙元素并不包含任何Easyui支持的控件class,所以这个地方就得不到你想要的效果了,应该这样写:

     $.parser.parse($('#tt').parent());

    渲染tt的父节点的所有子孙元素就可以了,不管你的javascript输出什么DOM,直接渲染其父节点就可以保证页面能被正确解析。

    ----------------------------------------------

    试了下,可以。

  • 相关阅读:
    DNNClassifier 深度神经网络 分类器
    浏览器对MP4视频 帧宽度 高度的兼容性
    UnicodeEncodeError:'latin-1' codec can't encode character
    文件夹下 文件计数
    the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.
    the “identity” of an object
    广告特征 用户特征
    如果一个维度全覆盖,则有效维度应该对该维度全覆盖
    a high-level neural networks AP
    使用 LDA 挖掘的用户喜好主题
  • 原文地址:https://www.cnblogs.com/exmyth/p/4532112.html
Copyright © 2020-2023  润新知