亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于handlebar.js動態創建模板的疑問

關于handlebar.js動態創建模板的疑問

慕妹3242003 2018-09-03 09:31:42
最近試著做一個h5音樂播放器,播放列表在html中是用handlebar進行渲染的,如圖index.html:js:var sListTpl = $("#sListTpl").html(); preTpl = Handlebars.compile(sListTpl); $(container).html(preTpl(data));但是由于音樂列表后面的數據是滾動才加載的,據我所知在html中創建的handlerbarjs在頁面初始化的時候就會將這些模板進行編譯了,我想問在js中能否創建一個handlebar的模板供我追加列表項目使用?目前js中動態加載部分還是用老式的拼接字符串的做法,個人覺得這樣就不統一了,而且代碼雜糅造成可讀性不高。            $.each(data, function(index, el) {                if (index >= songIndex && index < songIndex + Settings.reqNum) {                    tpl += "<li class='song btm-line' data-src='res/music/" + songNum + ".mp3' data-index='" + songNum + "'><div class='poster'><img src='./img/poster/" + songNum + "-thumbnail.jpg'></div><div class='songinfo'><h2 class='lsongname'>" + el.songName + "</h2><sub class='lsinger'>" + el.singer + "</sub></div><div class='loveflag'><i class='icon icon-love '></i></div></li>";                    songNum++;                }            });            $(container).append($(tpl));
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

關鍵是你把 handlebar 作為服務器端渲染的模板還是客戶端的模板(估計一般沒人用作客戶端的模板吧),你的問題應該也是在 handlebar 作為服務器端渲染模板時候才會遇到。

那么,handlerbar 在作為服務端渲染的情況下,一旦頁面生成,它在這個頁面上的生命周期就已經結束了。所以,你在客戶端所做的任何改變都跟 handlebar 沒有關系了。這個時候你想根據 ajax 取得的數據改變這個列表,可以用 jQuery 或者原生的 DOM 操作來實現,也可以使用客戶端模板,也就是常說的 MVVM 這之類的東西,比如 Angular 啊,React 啊,VUE 啊……當然你用客戶端模板的時候要考慮它和服務端模板的語法沖突。

當然還有一個比較原始的解法就是不用 Ajax,采用提交參數刷新頁面的方法……估計這個方法是你不想要的。


查看完整回答
反對 回復 2018-10-21
  • 1 回答
  • 0 關注
  • 686 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號