WebStorm:令人眼前一亮的一款前端开发IDE

从最初的dreamweaver,到Notpad++,再到aptana,每一款IDE总让我我感觉少了点什么东西。WebStorm却让我眼前一亮,虽然公司项目所用的开发环境是eclipse+aptana(主要是方便团队协作和工程调试),但是其他时间我都会学习使用WebStorm,现在4.0版本已经出来了,让我们来看看它都有哪些强大之处吧:

Read More

你清楚jquery是如何清除ajax缓存的吗?

大家都知道万恶的IE在ajax中往往只读取第一次ajax请求时候的数据,其余时候都是从cache提取数据,(太懒了T_T)。原生的JS清除ajax缓存的方法多,但是终觉有点繁琐,如果是用jquery的同学,就设置一个参数就OK了,那就是cache: false,比如:

$.ajax({
    url: "mms-draft!getMmsDraftList",
    cache: false,
    dataType : "json",
    data:{
         //some parameters
    },
    success: function(data) {
        //do something
    }
});

另外附上原生js方法:
  1、在服务端加 header(“Cache-Control: no-cache, must-revalidate”);(如php中)
  2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,”0”);
  3、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“Cache-Control”,”no-cache”);
  4、在 Ajax 的 URL 参数后加上 “?fresh=” + Math.random(); //当然这里参数 fresh 可以任意取了
  5、第五种方法和第四种类似,在 URL 参数后加上 “?timestamp=” + new Date().getTime();
  6、用POST替代GET:不推荐

onbeforeunload 在Firefox中的兼容问题

最近项目中用到了onbeforeunload,遇到了平时一些比较少见的怪异情况,比如在上一篇文章有提到过的获取返回值问题:/archives/209,然后马上又发现在firefox11中又存在着兼容问题:

$(window).bind('beforeunload',function(){
    return '您的内容尚未保存,确定要离开本页吗?';
});

我用了JQuery,原生javascript也大同小异。问题来了,在Firefox中却没有显示以上的字符,只是显示默认的提示信息:

Read More

获取页面离开onbeforeunload与onunload事件的返回值

在各种项目开发的过程中,页面离开事件onbeforeunload是我们经常要用到的,可以避免用户操作失误,给用户一个选择的机会,就比如我们常常用到的编辑器中。如果用户选择了离开,那么onunload或者onbeforeunload事件自然会触发;但若用户选择了取消,又该如何检测呢?

我们假定一个页面离开取消事件,叫做onunloadcancel。显然,这个事件应触发在用户按下对话框的取消按钮之后。但关闭提示对话框的触发流程并不是那么简单。我们先来回顾下这个过程:

window.onbeforeunload = function(){
    return "真的离开?";
}

当用户准备离开页面(比如按下关闭按钮,或者刷新页面等等),onbeforeunload事件触发。我们的脚本无法在这个事件里决定是否阻止页面的关闭,唯一能做到的只有返回一个字符串,这个字符串仅作为说明文字出现在关闭选择对话框里,用户可以选择关闭,或者不关闭。但究竟选择哪个,我们无从得知。

然而仔细分析下这个问题,其实不然。 如果用户真选择了关闭页面,那么之后所有的运行代码都byebye了;而继续留在页面的话,就当什么都没发生过,除了onbeforeunload事件。所以,我们在onbeforeunload事件里做点小花招,在此注册个几毫秒之后启动的定时器,如果页面真关闭了,那么这个定时器当然是作废了;那么页面还在,几毫秒的延时对于这个本来就是异步的界面交互事件也没有什么误差。

Read More

javascript对象的复制方法

对于基本数据类型,我们常用的复制方法是通过一个‘=’号来赋值实现,我们也叫传递,但是这个方法对于对象却不行,把一个JS对象通过等号传递给一个变量时候,并没有生成一个新的JS对象,而是与之原来的对象相关联,我们在对这个变量进行操作的同时,也改变了原来的JS对象。但是通常我们想要的知识这个对象的一个拷贝,一次我们可以自定义一个对象克隆方法:

function clone(myObj){
  if(typeof(myObj) != 'object') return myObj;
  if(myObj == null) return myObj;

  var myNewObj = new Object();

  for(var i in myObj)
     myNewObj[i] = clone(myObj[i]);

  return myNewObj;
}

JS文本域换行符和HTML换行标签的相互替换

在项目中,我们经常要实现以下编辑器的所见所得效果,当然也要支持回车,在此做下记录,对正则表达式还不是很熟练。

将HTML换行标签替换为文本域换行符:
textereaContext = divHTML.replace(/(
)/g, “\r\n”);

将文本域换行符替换为HTML换行标签:

divHTML = textereaContext .replace(/\n|\r|(\r\n)|(\u0085)|(\u2028)|(\u2029)/g, “
“);

作为一名工程师,怎样更好地与PM沟通合作?(工程师如何不被PM欺负)

沟通合作

老师教我们怎么写程式,但从来没告诉我们在公司里,会有个叫做PM的人每天分派作业给我们,还逼着我们赶快做完。这是许多软体工程师进入职场的第一个惊喜。隔了不久,还会发现,这些可能把你压得死死的PM,多半一行程式都不会写。于是我们会面临一种很矛盾的心情,有时候会是一种有点被欺负的心理。这篇文章是前一篇文章PM如何突破工程师的心防的延伸,我们讨论的是工程师在这样状况下的生存之道。

Read More