前端程序员容易忽略的有些基础知识

基本功数据结构与算法

现今有六个不等的JSON,相比复杂,可以参照这里的DEMO中回到的JSON。要相比它们的歧异,除了用现成的工具如beyond compare以外,假若大家的机器上并未设置那么些工具,能怎么样较快解决?作为一个程序员,一个个比较是不可行的,相比较完也不会有什么收获。我会把之放进Excel中(假若你机器连这么些都并未,那忽视自己),先排序,再用二分法去急速稳定找到有差异的JSON属性,尽管是1024个字段的大数据,也最多10次的固化即可找到。其实算法这东西,并不是给您一道问题然后把死记下来的内容背出来,而是当你遭逢相应的场地时,能体悟用那个主意去解决。

一、前言

HTML/CSS

      
在ComboBox中置放若干个CheckBox时,当我们勾选一些CheckBox,ComboBox会彰显相应的勾选项。

DOCTYPE

早已项目中遇见这样一个题目,用别样浏览器打开页面是好的,唯独是IE8打开时分外地慢。我注意到IE8打开时慢但CPU消耗并不高,只是网页空白很久没渲染出来,可以免除JS算法上的问题。经过周详研读代码发现,有人把有些script、 link等标签放到了DOCTYPE的前面。DOCTYPE是用来报告浏览器解释一切文档的一套法则的,一定要放在HTML部分的最前方,先有script标签,这就象征浏览器已经起来分解了,前边再有DOCTYPE也是从未意思的了。把DOCTYPE放置HTML部分的最前边,一起初提及的题目就化解了。

       例如:CheckBox项有A,B,C  
那么勾选这三项,ComboBox会呈现A,B,C

块状元素/内联元素,盒子模型

HTML/CSS有一个风味,不会报错,只会有浏览器渲染出来的结果不符合规划的逻辑其一题材,所以遭受题目时也很难得到网上去探寻答案。所以要把HTML/CSS写好,首先要和谐明白当中的片段基础原理,要说HTML布局,块状元素/内联元素里头的涉嫌我觉着是最基础的,延伸出来,就是CSS盒子模型。此外,HTML中元素的嵌套组合关系也是这一个首要的,CSS中广大性能,如position,z-index,都是按照父对象而言的,撇开HTML去谈CSS是纸上谈兵的。换而言之,要在结构(Structure)之下谈论表现(Presentation)。充足领略HTML/CSS中的那个基础,然后制定出适用的一套规范方案,相对让协会的工作效能提高,事半功倍。

      

HTML/CSS就能一气呵成的事体,无必要把它交给javascript去做

HTML5中一个较大的改进是表单项、多了重重实用性质如required,date控件等,可是表单的一对很基础的用法,仍然无法忘怀的。曾经碰着过有人想要实现点击radio旁边的文字时也要选中radio,于是就用jQuery去拔取,写事件。其实,这么些职能,只需要用一个label标签把input包含在里头就足以兑现了)。还有局部例证,如IE的标准注释,CSS
hack,这些职能我也见过去用javascript去实现

  1. if(isIE() && IE.Verson == 7){//这些是人有封装好的方法
  2. $(".something").css({width:"700px"})
  3. }

这般的代码只会无偿消耗浏览器的习性。HTML/CSS就能做到的事情,无必要把它交给javascript去做

       但有时候我们会发觉,点击CheckBox时,ComboBox相会世对象的称号,而不是我们想要的text

HTTP协议

近年来无数品类中都是用ajax去付出JSON到后台了,原始的这种HTTP提交已经相比较少见(至少在自家的花色中是这么),不过我们也无法忘却设置form的method、action的原有提交模式,因为这一个才是表单提交的原型,有助于大家通晓HTTP协议,例如POST和GET的区别,精晓数据是何等此前端到达后端的,又是何等从后端重临到前者。当您领悟了这么些,就可以更好地跟后端进行关联,碰到数据上的题材也能较快地定位解决。

       例如:CheckBox有三项A,B,C
它们的品类都是XModel类型,Text分别为A,B,C。
有时候ComboBox会展现成”XModel”

javascript

     

作用域

学过一些种的编程语言,效率域问题都是老生常谈了。在javascript中更加有函数的功用域这一基础知识。关于这一个,推荐《javascript权威指南》。当时我是把中文的读去再去读英文,把英文的读完去找图解,才觉得到把那或多或少了解了解的。

      
为了化解这多少个题目,网上有这么多少个模式,大多是重写ComboBox:

JQuery

       1.
https://www.codeproject.com/articles/563862/multi-select-combobox-in-wpf

选择器

在一个HTML DOM
树中,我要开展一个相比较复杂的元素拔取,不带有某些文字的涵盖某某类名的要素的左邻右舍的父元素的……下一场如何做?写一个很复杂的jQuery采取器?打住。jquery拔取器原理是用正则表明式去解释你的挑选器字符串(这一局部称作Sizzle),然后再用内置的有些遍历函数如prev,next等(其实那些函数也是依照DOM提供的艺术),去找到您想要的元素。我会不去盲目地举行Sizzle的语义歧义测试,而是自己遵照自己的逻辑去用prev,next等去找到自己的因素;而且退一万步的话,我也会尽量制止使用复杂的采纳器(在此以前的方案也有提及),单位个元素用ID,六个元素用类,相对高效规范。

学习前端的同学们,欢迎出席前端学习互换群

前端学习交流QQ群:461593224

       2.
http://blog.sina.com.cn/s/blog\_7f83849b010164yp.html

      
可是这几个措施太艰巨

 

二、示例

View部分:

 <ComboBox Grid.Row="2" 
           Grid.Column="1"
           Margin="0"
           x:Name="checkedComboBox"
           IsEditable="True"
           IsReadOnly="True"
           ItemsSource="{Binding ModelTypes}"
           Text="{Binding Text,Mode=OneWay}"
           VerticalAlignment="Bottom" >
        <ComboBox.ItemTemplate>
             <DataTemplate DataType="{x:Type projectSetting:ModelType}">
                  <CheckBox Content="{Binding Name}"
                            IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />  
             </DataTemplate>
        </ComboBox.ItemTemplate>
</ComboBox>

View的后台部分:

 checkedComboBox.DropDownClosed += CheckedComboBox_DropDownClosed;


  private void CheckedComboBox_DropDownClosed(object sender, System.EventArgs e)
  {
     BSViewModel vm = DataContext as BSViewModel;
     vm.UpdateText();
  }

 

ViewModel部分:

  public void UpdateText()
  {
        switch (CheckedRootModelTypes.Count)
        {
                case 0:
                    Text = "<无>";
                    break;
                case 1:
                    Text = CheckedRootModelTypes.First().Name;
                    break;
                default:
                    Text = string.Join(";",
                        CheckedRootModelTypes.Select(x => x.Name).ToArray());
                    break;
         }

        RaisePropertyChanged(() => Text);
  }

 

也就是说在ComboBox的DropDownClose中实现ViewModel中的Text刷新操作即可。