Javascript字符串模版

Javascript字符串模版

模板干的是拼接字符串的體力活。模板引擎就是利用正則表達(dá)式識(shí)別模板標(biāo)識(shí),并利用數(shù)據(jù)替換其中的標(biāo)識(shí)符。

字符串: '<a href={href}>{text}</a>'

對(duì)象字面量:{href:'blog.hackerwen.tech' ,text:'我的博客'}

結(jié)果: <a href="blog.hackerwen.tech">我的博客</a>

在之前,筆者只會(huì)ajax的時(shí)候,服務(wù)器返回一堆數(shù)據(jù),需要將數(shù)據(jù)展示在網(wǎng)頁上,而我選擇了最蠢也是最原始的辦法:手動(dòng)去創(chuàng)建dom節(jié)點(diǎn),抑或是手動(dòng)拼接html,將數(shù)據(jù)填入其內(nèi),最后更新dom。當(dāng)數(shù)據(jù)量大一點(diǎn)的時(shí)候,異步請(qǐng)求內(nèi)部的回調(diào)函數(shù)則混亂不堪,大部分都是創(chuàng)建dom,或是拼接字符串,幾乎不可以維護(hù)。

舉個(gè)栗子,這是我原來寫的一個(gè)小demo,向服務(wù)器發(fā)送一個(gè)請(qǐng)求,會(huì)返回一個(gè)json,

  1. 請(qǐng)求代碼如下:

     $.ajax({
       url:'colorPick.php',
       dataType:'json',
       data:{"index":index},
       type:'get',
       success:function(data){ //回調(diào)函數(shù)
           dosomethingwith(data);
       }
     });
    
  2. json如下,返回了五個(gè)顏色對(duì)象組成的數(shù)組:

     [
       {"traditional":"一斤染","japan":"Ikkonzome","r":"240","g":"143","b":"144","code":"#F08F90"},
       {"traditional":"桃色","japan":"Momo-iro","r":"244","g":"121","b":"131","code":"#F47983"},
       {"traditional":"紅梅色","japan":"Kōbai-iro","r":"219","g":"90","b":"107","code":"#DB5A6B"},
       {"traditional":"中紅","japan":"Nakabeni","r":"201","g":"55","b":"86","code":"#C93756"},
       {"traditional":"櫻色","japan":"Sakura-iro","r":"252","g":"201","b":"185","code":"#FCC9B9"}
     ]
    

如果你不知道字符串模版,你可能是將數(shù)據(jù)循環(huán)處理,將每一個(gè)對(duì)象取出來然后創(chuàng)建html片段,將對(duì)象的屬性值拼接至片段中,最后將html片段append,刷新dom,此處不做演示。

有了模版引擎后你可以這樣做:

  1. 首先引入模版引擎:

    <script type="text/javascript" src='js/template-native.js'></script>
    
  2. 定義模版:

     <script type="text/template" id='template'>
     <%for(var i=0;i<items.length;i++){%>
          <div class="color" style="background-color:<%=items[i].code%>;">
              <div class="code">
                 <p><%=items[i].code%></p>
                 <p>R:<%=items[i].r%></p>
                 <p>G:<%=items[i].g%></p>
                 <p>B:<%=items[i].b%></p>
              </div>
              <div class="name">
                 <p class="traditional"><%=items[i].traditional%></p>
              </div>
              <p class="japan"><%=items[i].japan%></p>
          </div>
      <%}%>
     </script>
    
  3. 發(fā)送請(qǐng)求:

     $.ajax({
       url:'colorPick.php',
       dataType:'json',
       data:{"index":index},
       type:'get',
       success:function(data){
           var obj = {//定義模版引擎所需對(duì)象,包含一個(gè)items屬性,值為data
               items:data
           }
           var resultStr=template("template",obj);//使用模版引擎,得到拼接好的字符串
           $(".colorBox").append(resultStr);//更新dom
       }
     });
    

沒錯(cuò),這里的模版引擎就是幫你做了拼接字符串的工作,而且一般的模版引擎都支持邏輯判斷、循環(huán)等操作,其本質(zhì)是將模板文件和數(shù)據(jù)通過模板引擎生成最終的HTML代碼。比自己拼接字符串不知道高到那里去了,而且自己拼接經(jīng)常會(huì)出問題。
vue中集成的v-for我個(gè)人感覺也是一種模版引擎,當(dāng)然,vue實(shí)現(xiàn)的功能更多。

下一篇博文,如何簡(jiǎn)單的實(shí)現(xiàn)一個(gè)字符串模版。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個(gè)人學(xué)習(xí)批處理的初衷來源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,973評(píng)論 0 11
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,658評(píng)論 0 4
  • 字符的 Unicode 表示法 codePointAt() String.fromCodePoint() 字符串的...
    卞卞村長(zhǎng)L閱讀 830評(píng)論 0 0
  • 學(xué)習(xí)是一個(gè)不斷成長(zhǎng)的過程,剛開始總是要容易一些,因?yàn)槲覀兡芎芮宄目吹阶约旱倪M(jìn)步。 每一次的進(jìn)步則給了我們繼續(xù)努力...
    不愛貓咪最怕小狗閱讀 790評(píng)論 6 13
  • 五一只能看朋友圈里各種曬旅游照片,自己一身工裝仍需工作。知道你回了家,看到你發(fā)的說說要去遙遠(yuǎn)的地方很久。順勢(shì)問你準(zhǔn)...
    一葉秋_閱讀 179評(píng)論 0 0

友情鏈接更多精彩內(nèi)容