xueping wang 记录2

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

  • 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目录就不能删除. 不然就会出问题!

====================================================php

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

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

==============================================java

vim折叠的透彻理解了

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

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

=======================================数据库

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

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

===================================================数组

分类组件, 就是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 TABLEtablenameENGINE=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, 注意 , 这些操做 不包括 标签中的 属性 内容!

相关文章
相关标签/搜索