从写的一个form的JS引发的思考

前些天写了个from的JS.
http://wd1.osp.corp.hki.yahoo.com/user/F2E/Money%202.0/web/intlindex_compare.html
这里用到的都是from中非常典型的JS了。
我先贴出我的第一版JS.
YTWFI.Module.StockCompare = function (dModule) {
    var dRootNode = YUD.getElementsByClassName("expt-main")[0];
    var dInputs = dRootNode.getElementsByTagName('input');
    var dExed = document.getElementById("ex-selected");
    var dSubmit = YUD.getElementsByClassName("btn-g1-m",'input',dModule)[0];
    var dReelect = document.getElementById("reelect");
    var dTally = document.getElementById("numtxt");   
    var fnSubmit = function(e) {if (dExed.innerHTML == '') {alert('請選擇指數!');YUE.stopEvent(e);}} //未選指數狀況
        for(var i=0;i<dInputs.length;i++){
            dInputs[i].setAttribute('name','ipt'+i);
            dInputs[i].checked = false;
            var dTd1 = dInputs[i].parentNode.nextSibling;
            if(dTd1.nodeType == 3){dTd1 = dTd1.nextSibling;};
            var dTd2 = dTd1.nextSibling;
            if(dTd2.nodeType == 3){dTd2 = dTd2.nextSibling;};
           
            var fnReelect = function(e,params){
                dInputs[params[2]].checked = false;
                dExed.innerHTML = '';
                dTally.innerHTML = '(請選擇指數,尚有<em>8</em>項)';
                params[0].style.color = '#000';
                params[1].style.color = '#000';
            }
            YUE.on(dReelect,'click',fnReelect,[dTd1,dTd2,i,dInputs]);
                           
            var fnReport = function (e,params) {
                if(this.checked == true){
                    var iCount=7 - dExed.childNodes.length;
                    if(iCount >= 0){dTally.innerHTML = '(尚有<em>'+ iCount +'</em>項)';}
                    if(dExed.childNodes.length>7){alert("您已選擇8項上限!");YUE.stopEvent(e);return;}//尚有項數已滿
                    params[0].style.color = '#ff0000';
                    params[1].style.color = '#ff0000';
                    var dDiv = dExed.appendChild(document.createElement('div'));
                    dDiv.setAttribute('id','div_'+params[2]);
                    dDiv.i = params[2];
                    dDiv.innerHTML = '<span>' + params[1].firstChild.nodeValue + '</span>'+'<img src="i7/ico_iscf_delete.gif" />';
                    var dImg = dDiv.lastChild;
                    var fnCheckedFalse = function (e,i){
                        params[0].style.color = '#000';
                        params[1].style.color = '#000';
                        dImg.parentNode.parentNode.removeChild(dImg.parentNode);
                        dInputs[i].checked = false;
                        var iCount=8 - dExed.childNodes.length;
                        if(iCount >= 0){dTally.innerHTML = '(尚有<em>'+ iCount +'</em>項)';}
                    }
                    YUE.on(dImg,'click',fnCheckedFalse,dDiv.i);
                }
                else{
                    params[0].style.color = '#000';
                    params[1].style.color = '#000';
                    dExed.removeChild(document.getElementById('div_'+params[2]));
                    var iCount=8 - dExed.childNodes.length;
                    if(iCount >= 0){dTally.innerHTML = '(尚有<em>'+ iCount +'</em>項)';}
                }
            }
            YUE.on(dInputs[i],'click',fnReport,[dTd1,dTd2,i,dInputs]);
        }
        YUE.on(dSubmit,'click',fnSubmit);
       
};   
这是最终版:
YTWFI.Module.IntlStockCompare = function(dModule) {
    var dForm = dModule.getElementsByTagName('form')[0];
    var dParam = YUD.getElementsByClassName('ui-parameter','input',dModule)[0];
    var dInputs= dModule.getElementsByTagName('input');
    var dNum = document.getElementById('numtxt').getElementsByTagName('em')[0];
    var dPane = document.getElementById('ex-selected');
    // action
    var onSetInputStyle = function(oInput,bFlag) {
        var dTd1 = oInput.parentNode.nextSibling;
        if(dTd1.nodeType == 3){dTd1 = dTd1.nextSibling;};
        var dTd2 = dTd1.nextSibling;
        if(dTd2.nodeType == 3){dTd2 = dTd2.nextSibling;};
        dTd1.style.color = (bFlag)?'#ff0000':'#000000';
        dTd2.style.color = (bFlag)?'#ff0000':'#000000';
        oInput.checked = bFlag;
        return dTd2.innerHTML;
    };
    var onGetFormSetting = function() {
        var sParam = ','+dParam.value+',';
        var sHTML = '';
        var nNum = 0;
        for (var i=0,j=dInputs.length;i<j;i++) {
            if (dInputs[i].type != 'checkbox') {continue;}
            if (sParam.indexOf(','+dInputs[i].value+',')>-1) {
                dInputs[i].checked = true;
                sHTML = sHTML + '<div><span>' + onSetInputStyle(dInputs[i],true) + '</span> <img class="ico-delete" name="' + i + '" src="i7/ico_iscf_delete.gif" /></div>';
                nNum++;
            } else { if (dInputs[i].checked) {onSetInputStyle(dInputs[i],false);} }
        }
        dNum.innerHTML = 8 - nNum;
        dPane.innerHTML = sHTML;
    };
    var onSetFormSetting = function(oComponent) {
        var sParam = '';
        var sHTML = '';
        var nNum = 0;
        for (var i=0,j=dInputs.length;i<j;i++) {
            if (dInputs[i].type != 'checkbox') {continue;}
            if (dInputs[i].checked) {
                sParam = sParam + ',' + dInputs[i].value;
                sHTML = sHTML + '<div><span>' + onSetInputStyle(dInputs[i],true) + '</span> <img class="ico-delete" name="' + i + '" src="i7/ico_iscf_delete.gif" /></div>';
                nNum++;
            } else { if (dInputs[i]==oComponent) { onSetInputStyle(dInputs[i],false); } }
        }
        if (nNum > 8) {alert('您已選擇8項上限!');onSetInputStyle(oComponent,false);return false;}
        dNum.innerHTML = 8 - nNum;
        dPane.innerHTML = sHTML;
        dParam.value = sParam.substr(1);
    };
    // init
    onGetFormSetting();
    YUE.on(dForm,'submit',function(e){if (dParam.value == '') {alert('請選擇指數!');YUE.stopEvent(e);}});
    YUE.on(dForm,'click',function(e){
        var oComponent = YUE.getTarget(e);
        if (oComponent.type == 'checkbox') {onSetFormSetting(oComponent);}
        else if (oComponent.type == 'botton' && oComponent.className.indexOf('ui-cancel')>-1) {window.history.back();}
        else if (oComponent.className.indexOf('ico-delete')>-1) { onSetInputStyle(dInputs[oComponent.name],false); onSetFormSetting(); }
    });
    YUE.on('ui-reset','click',function(e){YUE.stopEvent(e);dParam.value='';onGetFormSetting();});
};

看完代码,估计你们都这两段代码的写法肯定有你的想法(呵呵,当然要对YUI熟悉,否则都写不知道是什么东西)。我个人的观点是:第一段代码是以功能实现为目标的CODE。所以可读性差,重码率高。而第二段code则结构清晰,表现的实现和行为的实现分开,以后的可扩展性和可修改性也好很多。而且尽量想尽
现在google和yahoo率先采用一种叫scrum 的project方式。

Scrum的基本假设是:

开发软件就像开发新产品,无法一开始就能定义软件产品最终的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都朝向目标有明确的推进。

Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于 30 天后交付成果,团队每天用 15 分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除。

反映到F2E。那就要求我们的HTML,CSS,JS的code能力将非常地强,而且code的扩展性能也有非常的要求,不能为实现需求的功能而coding。在写code的过程时刻强调代码的可扩展性和灵活性。因为沟通的频率更高,所以要求code的可读性,语义化也同样更高。这是以后开发的一种趋势,所以掌握这种工作方法的核心非常重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值