Focus on DNN
08.27.09
摘要: 安装完NAnt之后,我们就可以使用NAnt自动打包模块了。 跟使用NAnt完成其他任何一件任务一样,我们需要创建一个.build文件。大家可以下载我这个文件作为模板。 我们将使用MSBuilder来编译整个项目,使用NAnt把大部分文件压缩到一个Resource.zip文件,并最后制作出一个PA包和一个源代码包。  阅读全文
Baldwin's DNN
08.03.09

分享一些在项目用到的jQuery小技巧, 对自己做个记录,对别人也许有些帮助:

1) DatePicker设置特定问日期, 有时我们可能需要特定的默认日期或重新设置值, 而不是Today, 代码如下:

// set the specific date value from the hidden element 'defaultDate'
if ($("#LBRGCalendar").length)
    $("#LBRGCalendar").datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', $('#defaultDate').val()));

// 错误的做法,因为DatePicker的setDate接收的日期必须是Date对象而非字符串
$("#LBRGCalendar").datepicker('setDate','2009-07-31');

2)  判断所获取的文档节点(element)是否存在:

// id为你所要获取的节点id
if ($(id).length) {
    // 对该节点进行操作
}

3) 当你在一链接(link)上注册某一事件(比如ajax请求)时不要忘了取消默认的链接行为, 因为点击一个链接时, 执行完捕获/冒泡动作后, 会触发链接的默认事件: 跳转到指定链接地址, 比如href="#"则在IE下有时会跳到页面顶端, 以往我们为了兼容所有的浏览器, 可以封装一个如下的函数:

function stopDefault(e) {
    // Prevent the default browser action (W3C)
    if (e && e.preventDefault)
        e.preventDefault();
    // A shortcut for stoping the browser action in IE
    else
        window.event.returnValue = false;
    
    return false;
} 

如今如果你在使用jQuery框架那你就幸福不少, 因为jQuery已经为你封装了这一函数, 原理一样但更精妙, 你可以直接如此用即可:

$('#SendToFriend').click(function(e) {
    // do somthing 比如: $('#EmailToFriendForm').dialog('open');
    
    // 阻止该链接的默认行为
    e.preventDefault();
});

4) 如何进行下拉框或下拉菜单(dropDown, select)等的相关操作,  不妨看看你之前写过一篇文章 如何借助JQuery封装HTML SELECT操作?

5) 如何判断Checkbox是否选中, 目前的常见方式有三种, 不妨作为参考参考:

// First way   
$('#checkBox').attr('checked');   
  
// Second way   
$('#edit-checkbox-id').is(':checked');   
  
 // Third way   
$("[:checkbox]:checked").each( function() {   
       // Insert code here   
    }
 ); 

6) 利用jQuery创建自动等高的列(元素)布局, 在此分享一个更为简便的函数, 更详细的关于此话题的讨论请查看我之前的一篇文章jQuery插件开发: equalizeCols Plugin:

///<summary>
/// Take a group of elements and make them all the same height
///</summary>
function equaliseHeights(arrayOfIds){
    var maxh = 0, i = arrayOfIds.length, id;
    while(i--){
        id = arrayOfIds[i];
        $(id).each(function(){
            if($(this).height() > maxh){
                maxh = $(this).height();
            }
        });
        $(id).height(maxh);
        maxh = 0;
    }
}

//如下使用即可, 接收的参数是一组需要设置等高的元素
equaliseHeights(['.feature .component-container']);

Enjoy jQuery, :)

Focus on DNN
07.29.09
摘要: 一、安装NAnt每次开发完毕一个DNN模块的版本,打包DNN模块是一件很繁琐的事情。更重要的是,为每一个发布的版本做一个安装包如果用手工管理和容易出错。这里介绍一下如何使用NAnt自动打包模块。首...  阅读全文
Baldwin's DNN
07.22.09

何谓CSS hack ?

由于不同的浏览器,比如IE6,IE7,Mozilla Firefox等,对CSS的解析原理不一致导致生成的页面效果千差万别,此时我们需要生成不同的样式让其兼容不同的浏览器,并得到理想的效果。详细请看: http://en.wikipedia.org/wiki/CSS_filter

说到底就是利用浏览器某些bugs来做文章, 没有哪位UI设计者希望使用CSS Hack, 大家羞于表达自己曾用过Hack, 但是有时你不得不出卖自己的灵魂给Hack. 目前我们项目希望可以在大部分的浏览器上通过验证, 工作量可想而知, 就好比我这会的签名档是“在windows7上蹂躏IE6,是无奈也是悲哀啊", 不管怎么样,总之本人的机器已经安装了5款浏览器,同时因为有些没法在windows7下安装,我们不得已独立一个额外的机器专门安装其他旧版本的浏览器, 蔚为壮观。正希望浏览器这个恶魔在娘胎里就是over了, 有点”矫枉过正“,:) 回归正题, 其实今天在此就想跟大家分享一些目前基本的CSS Hack, 至少对我们目前这个项目蛮管用的(日子还得一天一天过, 尽管牢骚不断, 呵呵)

Internet Explorer
/* IE 6 only */
body #ie6 {
     _display: block;
}

/*IE 6 and IE 7 */
#ie6andie7 {
     *display: block;
}

/* IE 7 only */
html > body #ie7 {
    *display: block;
}

/* IE 6, IE 7 and 8 */
body #ie6andie7andie8{
    display:block\9;
}  

/* IE 8 only */
body #ie8{
    display:block\9;
    *display: none; /*overrule for ie6 and ie7 which also read this rule*/
}

Firefox
/*Firefox 2 and 3 */
#firefox2, x:-moz-any-link {
    display: block;
    *display: none; /*overrule for ie6 and ie7 which also read this rule*/
}

/*Firefox 3 only (for Firefox 2 only use the rule above and this to overwrite for Firefox 3*/
#firefox3, x:-moz-any-link, x:default {
    display: block;
    *display: none; /*overrule for ie6 and ie7 which also read this rule*/
}
Safari
/* Safari */
@media screen and (-webkit-min-device-pixel-ratio:0) {
    #safari {
        display: block;
    }
}
Opera
/* Opera */
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {
    head~body #opera {
        display: block;
    }
}

最后喊一下口号: 尽量做到符合W3C标准, 不得已才Hack, 并尽可能用简便灵活的方案.

Focus on DNN
07.11.09
摘要: DNN5.0的模块注册文件的格式有一些变化,之前在4.x的一些惯用做法会有些问题。最常见的一个问题是,你会发现为DNN4.x制作的打包文件中的resource.zip文件在DNN5.0中安装...  阅读全文
Baldwin's DNN
07.03.09
作为开发人员,我们的首要任务是写出能够工作的代码。但是,仅仅“能够工作”还不足矣,为了能够持续提供真正的价值,代码一定要简洁。在此分享一些相关文章的摘录片段。
m2land
05.11.09
摘要:   DotNetNuke(dnn)目前分为Professional和Communit两个版本。我想很多人都有使用哪个版本的疑惑。 NikKalyani的两篇文章 DotNetNu...  阅读全文
m2land
04.12.09
摘要: DNN 比较好用的一个菜单模块式Navsuite模块,这个模块因为使用XML+XSL的技术手段,可以灵活的生成各种各样的菜单样式。 你可以通过修改style目录下的xsl文件来创建自己的菜单样式,但有一个问题是这个模块没有非常详细的手册,生成的XML是什么格式我们并不熟悉,我这里把生成的XML贴出来给大家参考。  阅读全文
m2land
04.03.09
摘要: iFinityUrlMaster-GetthebestSEOresultsbytakingcontrolofyourDNNurlsiFinityTagger-Ta...  阅读全文
m2land
03.18.09
摘要: 今天有人问,写了一个,贴出来也许有人能用上,不过这个语句是查询所有portal下的Administrator1:SELECTu.*2:FROM{databaseOwner}[...  阅读全文
Baldwin
02.28.09

 
图1. 可怜的JavaScript(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)

无论是公司的同事还是外界的程序员朋友们,大部分人对JavaScript的高级应用不甚了解,已有的知识架构里会认为JavaScript仅仅是一门脚本语言,其作用是给页面做一些锦上添花的效果,比如表单验证等等。潜意识里也就不会用面向对象的思想去编写JavaScript代码,也很少会去深入了解prototype, context, scope chains, closures等概念。这导致一个传统的脚本编写习惯:

  1. 在html页面或js文件里写很多functions
  2. 在需要用到function的地方直接调用

上面的做法是面向过程的,看似很自然很不错,但实际上存在很多弊端。在团队协作中,会增加代码冲突,可复用性和可维护性都很低,是一种应该被淘汰的旧式编码习惯。

对于JavaScript的学习,可能最重要的还是要从思想上认识到JavaScript不是玩具语言。JavaScript的作用远不止增加点表单验证,我们可以看看GMail、看看Google Maps,如果开发者们没有对JavaScript足够尊敬,是不大可能写出如此优秀的Web应用的。

JavaScript门槛很低,但门槛低并不意味着容易掌握。一定程度上,JavaScript的入门容易以及其极大的灵活性,使得要掌握 JavaScript变得很难(这和Ruby类似,Ruby也是一门入手容易得道难的语言)。从纯语言上讲(不考虑框架类库),我个人的经验是,学习 JavaScript比学习Java更具挑战性。我们大多习惯了传统的面向对象表述方式,一定程度上甚至会认为类、封装、继承等概念都得像Java、 C++那样,可能都从来没想过没有class, extend, override等概念也能面向对象。JavaScript的面向对象打破了这种思想上的禁锢:世界是多样性的,条条大路通罗马。夸张一点说,深入学习 JavaScript,更多的是一种思想上的挑战,能活跃思路,扩大视野,甚至改变对世界的看法。

上面所说的这些,无意于夸大JavaScript的作用和难度。每个人都或多或少的会强调自己所学的知识,但在这里,我希望自己能很客观的传递一个观点:无论什么语言,想要精通,都很不容易;如果想学习某门语言,就得从思想上尊敬这门语言,在尊敬的基础上去学习,才有可能掌握这门语言的精髓。除了JavaScript,再举两个例子:

一是CMD脚本。dir, cd, for, tree多容易,接触过不少非常想精通CMD脚本的人,这些人会花一段时间去努力学习,但绝大部分最后还是连一个简单的备份脚本也不会写。抛去术业有专攻等各种理由不谈,这些人最后无法精通CMD脚本很大程度源于他们自身的心魔:潜意识里认为CMD很容易,不“尊敬”它,因此实际行动上也就不会真的把心思放在学习CMD上。

二是HTML语言。经常能听到这样的话:HTML多容易,花个一两天也就会了,我自己也曾这么认为。但随着使用HTML经验的增长,我慢慢感觉到,对于Web前端开发来说,HTML可以说是最难的。HTML4.01规范中的91个元素就如汉字里的2500个常用字一样,我们读完小学后对常用字应该就都认识了,但要用汉字写篇优秀的文章,却并不容易。HTML也是这样,大部分宣称HTML很容易的开发者,往往只停留在认识body, p, form, table, div, ul等标签上,对于dl, legend, sub, caption等并非生僻的标签甚至都不认识。在常用字还认不全的情况下,宣称HTML很容易,真的很狂妄。(HTML的难度在于如何利用标签构建出结构良好且富含语义的代码,就如写作文一样,不能认为认识几个字就自信能妙笔生花。)

总之,语言无贵贱难易,要从思想上尊敬重视一门语言,才有可能驾驭它,否则,将永远游离在专业程序员的宝殿之外。

 
图2. JavaScript获得了应有的尊敬(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)

上面是老文,辞句上稍微有些修改。今天再读,补充一点最近的想法

对JavaScript而言,首先我们要意识到它的强大。目前各个浏览器争先恐后地优化提高JS引擎的性能,已经昭示出JavaScript强大的生命力和非常美好的前景。从心魔中去除对脚本语言的鄙视,尊重JavaScript, 对我们这些已经专职从事前端开发的程序员来说,早已不是问题。但我们还需宣传布道,要让后台开发程序员们也能意识到这一点,这还有漫长的路要走。

上面是一方面,还有一方面是:"我们需要关注JavaScript如何使用,或许更需要关注JavaScript能做什么。" 这是Aaron Gustafson在JavaScript渐进增强一文中非常强调的一点。精通某门语言,还意味着要清楚这门语言在哪些地方不适合使用。任何一门语言都不能滥用,庖丁解牛,杀猪砍肉,不同的场合需要用不同的刀。每个优秀的屠夫都有自己的一套刀具,并不是像关羽一样抗一把青龙偃月刀就能闯遍天下。

Baldwin
02.17.09
在开发web应用中, 自从我们抛弃了基于Table的页面布局后, 创建同等高度栏目或内容盒子的视觉效果(多是处于UI美观的考虑)已然是一个挑战, 在此推荐一个jQuery插件, 使得在同一个容器里“平衡”盒子的高度成为一间很简单的事情,从而修正了浏览器之间的差异, 还一个漂亮的UI.
m2land
02.08.09
摘要: 我安装的系统中有默认的en-US和增加的zh-CN两种语言。页面能正常在这两种语言中切换,但如何切换menu的两种语言显示。 参照系统管理菜单的多语言方法。基本找到了解决方法了。 做法就是在App...  阅读全文
Baldwin
02.07.09
wp

如果用过WordPress的博客应该都知道有一个很著名的插件WP-Cumulus WordPress plugin, 这也是一个3D Tag Coulds插件, 它通过Flash+js来展现Tag或目录的标签云效果, 超炫且极为实用, 而这也是我偶然发现, 觉得效果不错并对SunBlog有借鉴意义, 因为之前我也曾有JQuery来实现有些动画效果的标签云插件, 故现在手痒把Flash也整合进来, 如此用户就有更多的选择和效果呈现了, 经过一个晚上的努力终于把这一插件开发出来, 无缝的整合到SunBlog里边, 目前发布了Beta版本做个Demo, 即将开发的功能包括:

1) 用户可设置标签云呈现相关选项, 比如宽度, 高度, Tag颜色等等

2) 整合JQuery Flash Plugin, 不用默认的SWF Object脚本, 简洁方便.

3) 独立成一个控件组件,  也许DNN其他模块也可以用到.

4) 更好的支持中文Tag呈现

SunBlog 3D Tag Coulds插件 Demo

相关链接:

Wordpress标签云插件: WP Cumulus

3D Flash 标签云插件 WP-Cumulus

3D Tag Clould 插件的实现技术描述:http://www.roytanck.com/2008/05/19/how-to-repurpose-my-tag-cloud-flash-movie/

如何使WP-Cumulus插件支持显示中文标签云

Baldwin
02.04.09
在Asp.Net开发过程, 缓存是我们经常遇到的问题, 同样在DNN模块开发中利用好缓存无疑对我们开发的模块是有显著性能提升的效果的。本文将介绍DNN核心API自带的缓存机制及其一些使用方法.
RSS URL
About these feeds

Here at DotNetNukeBlogs.com we are focused on providing you a single source for finding the best blog posts about DotNetNuke. We have a filtered collection of blog posts here that relate to DNN in some way. To get your own blog posts listed here please check out this page.

When you click on one of the posts aggregated in our site you will be taken to the page/website for that post, not here on DotNetNukeBlogs.com, but to the actual home of the original post.