• xueping wang 记录2


    在使用easyui的tabs的时候, 标签页上的 可关闭 按钮 显示不出来?

    • tabs的 closable:true 属性, 实际上是通过在 标签头 tabHeader 中的最后面, 添加一个超链接 <a class="tabs-close" href="javascript:void(0)" > </a> 来实现的
    • 其关闭图标, 是通过 .tabs-close这个样式类来实现的: a.tabs-close { background: url('images/tabs-icons.png') no-repeat -34px center}

    • tabs-icons.png上有3个图标, 为了获取其中一个的关闭按钮图标, 背景图片的偏移位置 指定了 -34px center.
    • 由于这里的css文件是: easyui/themes/default/easyui.css文件, 而 背景图片的位置 是指定在 images/tabs-icons.png的, 所以, 如果在 easyui_version/themes/default/images这个目录中没有相应的图标文件的话, 就 不能显示 关闭 按钮了! 也就是说 即使你指定了 closable: true, 它只是 留了一个 关闭按钮的 占位符 在哪里, 并不能看到 关闭图标.
    • 由于 关闭 是通过 js文件来实现的, 所以 即使你 没有 关闭 按钮, 但是 仍然能够关闭标签页.

    因此, 不要轻易. 随便的去删除 easyui 目录下的 子目录! 比如这个 themes/default/images images目录就不能删除. 否则就会出问题!

    ====================================================

    为什么 onBeforeClose: function(){...}中使用 $.messager.confirm无效?
    1. 因为jeasyui的 $.messager.confirm/alert/progress/prompt等弹窗 都是 异步的: 即 主调函数 在执行到 $.messeger...的时候, 不会等到 messager的回调函数执行完了, 而是 直接就跳到 $.messager的下一条语句执行了, 直到主调 函数 执行完成后, 才会 再去执行 $.messager... 的回调函数 . 所以 发生了 tabs已经关闭了, 才弹出 消息框.

    2. 也就是说, 主调函数在 执行过程中, 是无法进入到 $.messager...的 回调函数中的 因此 , 也就无法在 回调函数if(r)...中 去改变主调函数中的 变量值了: 基本上是: 主调函数 执行完毕, 而且已经退出了之后, 才会 再去执行 $.messager...的回调函数.

    ==============================================

    vim折叠的透彻理解了

    如果设置的折叠方法是 fdm=indent的时候(查看当前折叠的方法是: set foldmethod) , 那么是会 按缩进进行折叠的! 是不需要你去 手动的创建折叠的, 会 自己自动的 创建 折叠.
    那么, 当光标位于某一行的时候, 按zc到底会折叠哪些内容呢?
    ::: 将会折叠 当前行 + 跟当前行所有 同级 的内容. .. > 直到 当前行的 上一级 父标签. 结果就只有 父标签的内容将会显示, 而里面的内容将被折叠隐藏
    zo展开当前折叠, 大写的: zO将会展开当前折叠下所有的子折叠
    zc 和 zC 则是同理的.

    **除了上面的 zc, zo, zO 可以一级一级的折叠之外, 那么, 要一次性的折叠所有的, 也就是 多级的折叠和展开 , 有两个工具, 一个是: 折叠所有的 , 使用: zM , 一个是 打开所有的 折叠, 使用 zR **
    **要注意的是, 不同的 fdm, 折叠方法, 可以使用的折叠快捷键 操作是不一样的, 比如 采用 fdm=marker的时候, 那么操作 zf等 就无效! **

    =======================================

    margin或padding的值为 1到4个值的时候, 分别指的是哪些?

    margin为4个时,margin:上 右 下 左;(为顺时针方向)
    margin为3个时,margin:上 左=右 下; 即为三层: 上 / 中/ 下
    margin为2个时,margin:上=下 左=右;
    margin为1个时,margin:上=右=下=左;

    ===================================================

    分类组件, 就是accordion, 就是多个 面板Ipanel)的组合在一起, 所以 面板是所有组件的基础, 最重要的基本组成元素。

    对于accordion中的面板, 只需要有几个 div就是了, 每个div只需要一个 title属性, 加上其中的内容就可以了。

    对于easyui bs等的属性写法或js的写法:

    • 只有在牵涉到/包含有 事件或方法的时候 才用 js的写法方式, 如果不牵涉到事件的话, 就推荐采用 属性的方式 来书写。
    • 所有组件的使用都是 雷同的 类似的, 都主要是 包含三个方面的内容: 属性+ 事件 + 方法 , 思想步骤 用法都是一样的 。
    • 属性 统一写在 data-options里面和 单独 按属性的方式来写 都是一样的, 都是正确 有效的。

    ======================================

    使用tp的 redirect跳转, 其实 功能是很强大的, 并不只是设置跳转地值, 可以有很多其他参数的, 比如 跳转时, 传递附加参数, 延时跳转时间, 跳转提示信息

    参考: https://blog.csdn.net/dailoge/article/details/71028197

    • 使用空格只是分割 1个字符的距离, 但是如果要分隔 的位置较多 通常不用空格来分隔对齐, 而是用 padding(如果某些框架导致 padding不可用, 也可以使用 margin)

    • 区分 isset和empty的区别: 前者是 判断 这个变量是否有, 有没有这个变量, 而后者是说, 如果这个有这个变量, 他的值是不是空值,比如是: ‘’, 0, 等等。

    • 判断 某个变量不为空, 就是使用 if(!empty(...)) 因为if本身就是一个 肯定的 陈述语句, 所以, 他的直观意思就是 : “如果是 。。。。 ” if( !empty(...) ) 的直观意思就是 : “如果。。。 不是。。。”

    • 因此, 在判断 POST的某个变量的时候, 就是 使用 两个条件:一个是isset, 一个是!empty: 即: if(isset($_POST['FOO']) && !empty($_POST['FOO']) )

    ===========================

    vim的dw和db区别?

    由于一个单词, 总是 从前往后看的, 所以, 如果光标在单词的开头, 则 dw将删除整个单词, 如果光标在 单词的后面, 则 db删除单词的时候, 则认为, 当前光标所在位置字母不属于 单词所有, 所以 db 将只删除 当前光标之前的 单词字母, 当前光标所在的字母将不删除.

    如何设置 按f5或鼠标右键的刷新事件?

    • 不要使用 keydown 事件, 这个主要是针对 某些特殊的按键, (不包括 f5 或 右键刷新)
    • 右键刷新 或 按 f5 刷新, 可以在 window.onload = function(){....} 的js方法中 来写!
      具体参考: unbeforeunload()事件可以禁止onunload()事件的触发, 这个是用来 写 关闭页面的触发事件 https://www.cnblogs.com/jianmingyuan/p/5962729.html

    关于 外键?

    • 对于 主键 所在的 表 其实 是 没有任何影响的. 甚至说 , 它根本就是"浑然不觉" 的

    • 外键是: key 字段名 constraint 外键约束名称 : 通常是 表名_ibfk_1(fk就是 foreign key的意思) references... 是 一个表的 非主键 字段/ 普通字段, (跟另一个表的 主键字段关联)
      所以 要 删除 外键 要在 创建 外键约束的 表中 去 alter .

    • 删除外键的语法是: alter table tbl1 drop foreign key 约束名称 (即 constraint后 的那个名字 )

    CREATE TABLE `pj_stud` (
      `stu_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `class_id` smallint(5) unsigned DEFAULT NULL,
      `name` varchar(20) NOT NULL,
      PRIMARY KEY (`stu_id`),                    // 主键
      UNIQUE KEY `name` (`name`),          //  唯一性key
      KEY `class_id` (`class_id`),                // 普通索引
      CONSTRAINT `pj_stud_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `pj_class` (`class_id`)  // 外键约束.
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
    
    

    =============================

    关于数据库的存储引擎?

    • mysql有四种常用的 innodb, myisam , memory, blackhole(作中继存储服务器)存储引擎.
    • 注意默认的是 myisam, 就是说, 如果你i不显式地指定存储引擎的话
    • 由于 myisam不支持外键, 所以如果用默认引擎创建外键的话会失败
    • 如果不强调程序的质量和稳定性健壮性的话, 就可以不用外键, 因为外键本身会带来一些问题和复杂性 .
    • 关于存储引擎, 可以参考https://www.cnblogs.com/ldj3/p/9197485.html 关于静态表/动态表/压缩表 , 参考: https://www.cnblogs.com/champaign/p/3422377.html
      在mariadb中, 用 Xtradb来代替了innodb.
      因此, 也就不要 过分地追击/纠缠 使用什么 存储引擎了, 其实对一般 数据流量不大的应用, 你可能体会不到它们只见的区别的.

    在mysql和c语言中的 整数和 无符号整数的区别?

    对于 a unsigned int ; a=1; b unsinged int; b=2: select a-b 的时候, 和 print "a-b: %d ", a-b, 和 print "a-b : %u" , a-b 都会得到 -1, 或 整数的最大值:

    • 因为对于 FFFF FFFF. 来说, 可以是有符号数 -1 , 也可以是 无符号数的 整数的最大值.
      因为, 如果是 有符号数, 那么, 最高位代表的是 符号位, 如果是 0 则表示是正数, 1表示的是负数, 如果是负数, 那么负数的值(绝对值)则是 剩余的部分 取反+1. 所以是 -1
      如果是无符号数, 则表示 整数的最大值. 参考: https://www.cnblogs.com/champaign/p/3422377.html
    • 所以 , 在 设置mysql的整数时, 要注意使用 unsigned可能带来的问题. (并不是不使用, 比如对于 primary key)通常还是使用unsigned的.
    • 对mysql的参数进行设置, 语法是, 使用 set 语句. 比如: set mysql_mode="NO_UNSIGNED_SUBTRACTION"
    • 好像: subtract 和 substract 就是中间 多一个 s或少一个s 都是可以的.一样的 ?
    • 注意, mysql 的 unsigned是一个字段类型 的修饰语, 因此 不能放在 字段类型 int的 前面, 而是要放在 后面的!

    ===============================

    mariadb的默认存储引擎不再是: myisam, 而是 maria(后来叫 aria), 或者是 innodb. 这个和传统的mysql数据存储引擎有所不同 , 后者默认的是 myisam. 只是 mariadb的支持事物 的功能没有默认开启, 可以通过语句来开启: MariaDB默认的存储引擎是Maria,不是MyISAM。Maria可以支持事务,但是默认情况下没有打开事务支持,因为事务支持对性能会有影响。可以通过以下语句,转换为支持事务的Maria引擎。ALTER TABLE tablename ENGINE=MARIA TRANSACTIONAL=1;

    如何在mysql中调整 字段的顺序?

    ::: 是通过 add语句, 或 modify语句/ change字句, 指定顺序, 关键字是 两个: first(放在第一位), after other_col是放在 另一个字段的后面.
    但是要注意, 使用上面的三个字句时, 都要重新定义字段的 definition, 即使字段的属性没有改变!
    可以一次性的 用 update 语句 来更改 数据表的 多个字段的值, 只是 多个字段之间要加上 逗号.
    比如: MariaDB [pjiao]> update pj_stud set account='loeng2084', passwd='123456' where name='long2084';

    mysql中的字符串截取和长度问题?

    • length函数, 是计算字符所占的 "存储"长度, 字节长度: 因此, 数字/字母的length是1, 汉字等多字节的length是2, 或3;

    • char_length, 顾名思义是, 计算字符的个数(长度), 所以, 所有 的数字/字母/汉字等都是1.

    • 截取函数: left, right, substring(而mid, substr是 substring的别名是一样的), substring的语法是 substrign(str, start_pos, length): start_pos可以为正, 也可以为负数. 从1开始数起.
      比如:

    //  去掉name字段 最后四个数字
    MariaDB [pjiao]> update pj_stud set name=substr(name, 1, length(name)-4);
    Query OK, 3 rows affected (0.39 sec)
    

    ==============================

    php是一种 数据类型 为"混合" 的语言, 前期, 主要是 函数库(全局函数), 后期高版本才有对象(而且 语言本身提供的内置对象都不是很多. ) 所以, php的使用主要还是用函数. 因此,
    函数的使用, 就是 "全局函数, 直接写函数名(没有对象, 没有对象语法格式的 点, 或 箭头, -> 等). 比如: array_keys函数, 就是直接写 array_keys($arr, [[$val], [$strict true/false]]) 而不是使用$arr.array_keys(...)的方式.

    一直很模糊, 数组的两种基本类型, 一种是 索引数组, 一种是 关联数组, 所谓的索引数组, 就是: 常用的/常说的, 直接写的数组,直接规定 数组元素的数组. 这个就叫索引数组, 而关联数组则是人为规定 "键值""键名"的数组, 键值是用 "字符串" 来表示的!
    数组是一个 内部 带指针的 映射对. reset , arsort, key 等有很多对数组进行操作的 "全局"函数

    ==============================

    在tabs的add 方法中, 要设置 href: 内容地址html文件. 使用 U方法, 如何传递 附加参数?

    1. 在任何地方, 任何情况下, 都是可以使用U 方法进行 附加参数传递的, 即使 不是 通过 action / submit 提交 按钮等方法 提交的 , 也是可以的!

    2. 附加参数的提交方法, 虽然可以用 array的方法, 但是还是推荐 用 /?name1=value1&name2=value2等的方法进行! 更简单直接!

    3. 问题的成功与否, 关键在于 写法, 字符串 是否添加了 引号!

    4. 要判断 U 方法 的参数 是否 传递成功 , 可以 在接受页面, 用 input type="text" value="{:I('get.name1')}" 的方法 来显示的查看. 然后 再将 input 改成 type="hidden" 来传递隐含的/隐藏的 内容 信息!!!

    
      $('ul#jslist>li').click(function(){
        var tit=this.innerHTML;
    
        var  para = 'teacher=' + tit + '&student=' + '{$student}' + '&class=' + '{$curClass}';  // 这个是 参数字符串,  它的写法很重要! 
        //var  para = 'teacher=' + tit ;
        alert(para);
    
    
          tt.tabs('add',{
    	title:tit,
    	href:"{:U('pjcontent')}"+"/?"+para,   // 这个是tp在U 方法中 传递附加参数 的 最关键的一步 写法. 在原来的地址(.../foo.html)后面, 是没有 斜杠的! 所以 要拼接字符串: '/?', 然后加上用 & 连接的 参数字符串
    	closable:true,
    	cache: true,
         });
    
    
    
          <tr>
    	<td colspan="4">
    	  <h5>意见及建议</h5>
    	  <h5> 这里是一个文字编辑工具栏</h5>
    	  <textarea id="advice" rows="5" cols="100"></textarea>
    	<input type="text" name="student" value="{:I('get.student')}">       // 这里完了之后 , 改成 input type="hidden".... 
    	<input type="text" name="teacher" value="{:I('get.teacher')}">
    	<input type="text" name="class" value="{:I('get.class')}">
    	</td>
          </tr>
    
    

    ============================

    关于 教师任课表和 教师得分表?

    1. 两个表的前面几个字段, 可能感觉是 一样的, 比如都有: id, name, class, course. 所以 , 是否可以考虑 将这两个表 合并成一个表 来 处理?
      实际上, 是不可以的, 因为任课表, 的一条记录 , 可能是 对应着 得分表中的 多个 学生的评教结果, 对应着多条 记录, 两者是 一个 " 一对多" 的关系.

    2. 或者说, 即使你可以合并在一起, 也会 牵涉到 不同的多个用户, 同时 查询select 和 更新 update 同一条记录, 这样 会 造成 表的 行级锁, 或表锁. 直到前面那个用户 的事务 被 commit 或 rollback.. 参考 https://www.cnblogs.com/Leo_wl/p/5320498.html https://blog.csdn.net/younglao/article/details/76570187
      不能 在 同一条语句中 同时进行 更新 update和查询操作. ...
      关于加锁, mysql的不同存储引擎支持不同的 锁, 表级锁 table-level locking 和 行级锁 row-level locking . 而且对查询操作 加: 读锁, 对update 操作, 加 写锁, 这些锁 都是 自动 隐含 添加的. https://www.cnblogs.com/zhanht/p/5431273.html

    关于 用来存放 comment评论 内容的 字段类型 用 varchar 还是 用 text? 非常好的透彻的一篇文章: https://www.cnblogs.com/gomysql/p/3615897.html

    • 可以肯定的说, 如果只是用来存放 简单的/简短的 评论 的 话,(比如 最多 几百个字, 2000~3000个字)的话, 一般用 varchar 是绝对没有问题的!

    • 不管是varchar 还是 text , 最终 决定 存放 个数的还是 字节个数! 一个varchar类型的字段最多能够存放的汉字个数, 最终还是由 mysql的 一行 one row 的字节长度来决定的:
      一行能保存的 最长字节是 65535个字节, 即一条记录中 , 所有字段 所占的字节总数加起来就是65535. 因此varchar字段所能保存的最多汉字字数, 就是 (65535-1-1-2-(其他字段所占 的字节数)) / 汉字编码字节单位数: 其中的1 是 一条记录 开始存储的位置不是从第一个字节, 而是从 第二个字节开始 存储的; 第二1 表示的是 default null 字段所占 的一个字节, 2是 一个 varchar字段需要 用(1个或) 2个字节 来存储 varchar字段 实际究竟存放的多少个字节数. (其中 varchar(255) 需要用 1个字节来存放 , 大于255的需要用 2个字节来存放)

    • 然后就是 剩余的 字节数 来除以 编码数, 如果是 utf8编码, 就除以3, 如果是 gbk/gb2312, 就除以 2.

    • 当然, 如果是varchar类型的 字段, (通常最少都是 2万个utf8 编码的汉字了, 因为 65535 -??? / 3 = 就是 2万多个了) 内容超出了, 会自动的转换成 text 类型的.

    =====================

    关于 vim快速编辑的 "文本对象" 参考: https://zhuanlan.zhihu.com/p/25999103

    • 把单词/句子/段落看作是一个 "文本对象" 整体, 进行编辑.

    • 编辑的方法是 : 动作 + 范围 + 对象: 你要作什么操作+...

    • 如何快速选中 html的 某个标签中的内容?
      这里最重要的 就是 这个 文本对象 指的是哪些? 它包含的是哪些东西?
      包括: 单词word(用 w表示) , 句子sentence( 用 s表示), 段落 paragraph(用p表示). 还有 各种成对括号的 "后括号" , 包括: ', ", ), ], }, >等.
      还有一个 非常重要的 文本对象 , 就是标签! 所谓 标签 就是 : 只 html中的 元素标签, 比如 <div> <p> <span> <a> <body> 以及 php中的 标签 <php...> 等标签. 所有的 这些 标签 都用 一个 字母 "t" 来表示 , 这里的t表示 : tag 的意思!

    因此, 要 快速 的选中 某个 html标签中的 内容 : vit, 删除 标签中的 内容: dit, 注意 , 这些操作 不包括 标签中的 属性 内容!

  • 相关阅读:
    html float
    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    FLEX 如何跳出警告对话框 Alert
    点击超链接,不改变滚动条位置
    HTML DOM CSS position的用法
    FLEX 动态添加事件
    html display
    php和swf通信
    html css float left与 float right的使用说明
    如何去除FLEX LINECHART 线条阴影
  • 原文地址:https://www.cnblogs.com/bkylee/p/10596998.html
Copyright © 2020-2023  润新知