2011年5月30日 星期一

HTML 5 Audio Format Support

以下是測試HTML5在不同作業系統與不同瀏覽器下,對於Audio格式支援比較表


作業系統
Browser multi source ogg mp3 html5(m3u8) m3u8
Windows 7 Chrome 11.0 true true true false false

Firefox 4.01 true true false false false

IE9.0 true false true false false

Safari 5.05 true false true false false
Ubuntu Chrome 11.0 true true false false false

Firefox 4.01 true true false false false
Mac 10.6.7 Safari 5.04 true false true false false
Android2.2 版本2.2 false false false false false
Android2.3 版本2.3.3 true true true false false
Android3.0 版本3.0 true true true false false
Iphone4.0
true false true true true

2011年5月10日 星期二

jQuery Template

一.資料架構

使用json物件或一般物件
var arrayObj=[
    {},{},{},{}
]
var dataObj={
    "prop1":"xx","prop2":"xx2",..
}


二.Template 內如何套用資料
當資料為Array就會反覆的將Array內物件反覆的套用tmpl
若當資料為一個物件,則會當成只有一個物件的Array,
只會套用tmpl一次

$("#樣板id").tmpl(要帶入的資料)
例
var data=[{"myname":"test1"},{"myname":"test2"}];
$("#my_tmpl_1").tmpl(data);

三. Template內資料讀取

資料來源分為兩個部份,一個是載入的資料,一種是自訂的變數
當透過tmpl帶入資料時同時可自訂變數
1.帶入資料並自訂變數與method
    $("#my_tmpl_1").tmpl(data,{
        getResult: function () {
                return "xxx";
            },
        title: "my title"
    });
2.取得由帶入資料取得的內容
    1.${變數名稱}
    2.透過tmplItem取得
        ${$item.data.變數名稱}
        ($item.data代表著整個tmplItem內的資料)
3.取得由自訂變數來取得的內容
    都需要透過$item來取得
    ${$item.變數名稱}
    
    呼叫執行自訂的method
    ${$item.methodName(param)}
4.在tmpl內在任何地方要參考到傳進來的資料都可用
    ${$data.變數名稱}來取得
    若是在{{if}}內或是{{each}}內要用到要用到
    則用$data.變數名稱即可
    
    例 {{if $data.author=="ozzyqq"}}
5.對帶入的資料變數加入固定字串
    例
    <li><a href="#" id=${"submenu_"+id}>${title}</a></li>    
    不可用 id="submenu_"+${id}
6.將自訂屬性資料加入tmpl內
    <div class="greenbar">${title+"-"+$item.nowIndex}</div>    


四.取得由樣板產生的tmplItem應用

當頁面上的DOM物件是由tmpl所產生的,則可透過這些dom物件
取得tmplItem,做更多的應用
1.取得tmplItme
    透過$(dom物件).tmplItem()取得tmplItem
    注意,該DOm物件一定必需要是透過tmpl所產生的才有效
2.取得tmplItem的dom物件
    tmplItem.nodes
3.取得tmplItme的資料
    tmplItem.data
4.加入或修改變數
    也可對套用的資料做修改或額外新增變數進去
    例    $.tmplItem(this).data.newVar=xxx;
4.更新
    只要改變tmplItem.data值再執行
    tmplItem.update();
    畫面就自動更新成新的值顯示的頁面
    
在樣板外,是透過$(dom物件).tmplItem()
來取得tmplItem的參考
而在樣板內則是以$item參考到tmplItem    


五.{{if}} {{else}} 內的變數
{{if 變數名稱}}
{{if this.變數名稱}}

Example:比對外部值
{{each items}}
    <option value=${id} {{if id==$('#folder02Select').val()}} selected='selected'{{/if}}>
        ${title}
    </option>
{{/each}}    

六.在tmpl內使用{{html 變數名稱}}
通常在tmpl內使用${變數名稱}所取得的值會經過編碼
若要取得的值不經過編碼則要用{{html 變數名稱}}
七 {{each 變數名稱}} {{/each}}

在樣板內,將array型的變數資料丟給each處理,可以
將array內每筆資料都再撈出來處理
在each內,
$index代表該筆資料的index....用${$index}顯示
$value代表該筆資料的內容...用$($value.變數名稱)來取得該筆資料內的變數值
例:
{{each 變數名稱}}
    <li>${$index}+"__"+${$value.資料內的變數名稱}}</li>
{{/each}}


八 多層次的each使用

若不同層有相同的prop name可用this來區分
{{each items}}
    <div class="btn_bg">
        <div class="first">${title}
            {{if this.items}}
                <ul class="link">
                    {{each items}}
                        <li><a href="#">${title}</a></li>                          
                    {{/each}} 
                </ul>                    
            {{/if}}
        </div>
    </div>
{{/each}} 


九.樣板中套用樣板
{{tmpl(資料變數名稱) "#樣板id名稱"}}
十.對物件套用不同樣板流程

1.將jQuery物件轉成準備套tmpl的tmplItem    
    selectedItem = $.tmplItem(jQuery物件);
2.指定tmplItem要使用的tmpl
    selectedItem.tmpl = detailTemplate;        
3.更新
    selectedItem.update();

注意    
無論是套用不同樣板,或是更新樣板tmplItem的data後
使用update()更新畫面
如果所產生的DOM物件有些屬性,是經由外部的js所設定
在update後這些屬性都會消失

jQuery Memo

jQuery Memo
1.外部html帶入時
若使用innerHTML 取到的是root node下的內容
outerHTML則會包含Root Node
2.網頁設定編碼為utf-8
HTML檔案本身需以utf-8儲存
載入外部JSON檔案時,也需以utf-8格式儲存
才不會造成亂碼發生
3.取得json物件的所有屬性
若物件為array
items:[
    {xxx},{xxx},{xxx}...
]
可以使用length取得array長度,並進而取得所有資料
若物件非array
items:{
    "title":xxx,
    "name":xxx,...
}
則可用for(prop in obj)方式取得 prop名稱
for(prop in items){
    alert(prop+"="+items[prop])
}

4.對大量物件binding listener

當要對大量的物件設定監聽的事件與要觸發的function,可以使用delegate
$(xx).delegate(指定處理物件,指定觸發事件,執行處理的function);
$("#mytable").delegate("td", "hover", function () {      
    $(this).xxxx
})
指定處理物件值可以是tag name如"td"
可以對class如".myclass"    

5.對物件設定監聽程式

當要對物件設定如Click...等監聽,一定要在物件已經產生的狀態下設定
才會有效,如果在物件尚未產生之前就要把監聽設定好
則需透過livequery plugin來做
例
$(".myclass").livequery("click",function(){})

6.jQuery與DOM物件互轉

1.在jQuery的操作,絕大部分回傳都會是一個jQuery包裹物件
  要將jQuery物件轉成DOM物件,$("'#"+containerID+"'")[0]
2.DOM轉jQuery物件
    用$(dom物件)包裹後即為jQuery物件
3.在jQuery使用each取得所有物件
    each內的this是一個DOM物件,需要$(this)包裝過
    才會變成jQuery物件

7.index

當selector取得一堆的子node要對特定子node操作    
1.透過index取得第幾個物件
    $(".left_box :eq("+_index+")")
2.取得目前物件的index值
    例如有一堆li 由以下可以知道自己是在第幾個
    $(".left_box li").index($(this))