Framework7——Template7之Helper的用法及注意點
最近一直在使用Framework7,雖然Framework7可以構建精美的iOS和Android應用,也提供了文件,但是使用的時候遇到很多問題在網上還是搜不到,感覺還是沒有很多人使用。在這裡寫一下Template7的helper的用法和我遇到的坑以其解決方法。
首先在使用Framework7的時候我推薦大家使用Template7模板,比起自己用js拼串寫html來說,Template7更有效率且更易於維護。作為Framework7提供的模板方法,Template7和其他模板方法一樣也提供了helper來供大家在Template7表示式中使用js方法,下面正式開寫。
先講一下我的使用場景,首先我的目的是要顯示時間,但是我的後臺傳過來的是long型別的時間型別,並且還有指定的顯示時間格式,所以我的helper寫法如下:
/**
* 顯示[年月日時分秒]
*/
Template7.registerHelper('yyyyMMddHHmmss', function (value, options) {
var date = new Date(value);
return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
});
/**
* 顯示[年月日時分]
*/
Template7.registerHelper('yyyyMMddHHmm', function (value, options) {
var date = new Date(value);
return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes();
});
/**
* 顯示[年月]
*/
Template7.registerHelper('yyyyMM', function (value, options) {
var date = new Date(value);
return date.getFullYear() + "/" + (date.getMonth() + 1);
});
接下來是如何使用:
<span>{{yyyyMMddHHmmss createdDate}}</span>
<span>{{yyyyMMddHHmm createdDate}}</span>
<span>{{yyyyMM createdDate}}</span>
接下來再講一個使用場景,我的html頁面要根據資料的狀態顯示不同的背景色,當然我的後臺傳過來的資料是int型別的,所以我需要將int型別轉換為對應的class名稱,helper寫法如下:
Template7.registerHelper('bgColor', function (status, options) {
switch (status) {
case 0:
return 'status-0';
break;
case 1:
return 'status-1';
break;
case 2:
return 'status-2';
break;
case 3:
return 'status-3';
break;
default:
return 'status-x';
break;
}
});
css樣式程式碼:
.status-0 {
background-color: #FCF8E3;
}
.status-1 {
background-color: #D9EDF7;
}
.status-2 {
background-color: #DFF0D8;
}
.status-3 {
background-color: #F2DEDE;
}
.status-x {
background-color: #FFFFFF;
}
接下來是呼叫方式:
<div class="card-header {{bgColor status}}">
......
</div>
helper的基本用法如上,從上面的程式碼可以看出helper的註冊模式如:Template7.registerHelper(方法名, function (引數1,引數2,,,引數n,options) {...處理函式...}
所示,呼叫方式如:{{方法名 引數1 引數2 ... 引數n}}
所示,更詳細的用法可以參考:http://www.shouce.ren/api/view/a/11250。接下來是需要注意的地方。
Template7.registerHelper中function中的引數是可以多個的,儘管最後一個引數options可能用不上(我目前沒有用到),但把它帶上,同時記得呼叫時你傳的引數順序要和你定義的一致。
一定要在Framework7中啟用Template7,在new Framework7時
precompileTemplates: true
即可,如:var myApp = new Framework7({...,precompileTemplates: true});
你使用時可能會發現有的地方使用helper不行或報錯,如:
Uncaught Error: Template7: Missing helper: "xxx"
,這時候將你的helper.js(我建議大家將helper集中放在一個js檔案中便於管理)先於var myApp = new Framework7({...,precompileTemplates: true});
這段程式碼之前引用即可。(我當時遇到這個問題時發現如果是通過Framework7的路由load的頁面可以使用heper方法,但不是通過理由載入的頁面則使用報錯,大家可以參考一下。)
基本情況如上,以後有的話還會補充,未完待續……