[英]How create custom attribute handler for jsviews?
我想使用JsViews播放html5視頻內容,如下所示:
HTML:
<div id="result"></div>
<script id="myTmpl" type="text/x-jsrender">
<video autobuffer controls data-link="muted{:muted}">
<source id="mp4" data-link="src{:src}" type="video/mp4">
</video>
<button id="muted">change muted</button>
</script>
JS:
var data = {
src: "http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4",
muted: true
};
var myTmpl = $.templates("#myTmpl");
myTmpl.link("#result", data);
$("#result").on("click", "#muted", function () {
$.observable(data).setProperty("muted", !data.muted);
});
可以看出,默認情況下屬性被muted
處理,並且看起來像muted=true
或muted=false
,但是在HTML 規范中 -屬性“ muted”可能會也可能不會。 也就是說,to應該在這里充當disable
的屬性: 數據鏈接disable和title屬性 。
也許有某種方法可以自定義(替代)jsviews中的標准html屬性處理程序?
您可以使靜音屬性得到取出時muted
是false
,通過寫
<video autobuffer controls data-link="muted{:muted||null}">
但是,這將無法使事情如您所願地工作,因為動態刪除或添加靜音屬性實際上不會使視頻控件靜音/取消靜音。 為此,您需要將已靜音元素上的已靜音屬性設置為true / false。
同樣,當用戶單擊視頻元素UI上的內置靜音控件時,您希望它可以明顯地修改muted
數據屬性。 可以使用以下代碼進行所有操作:
var video = $("video");
$.observe(data, "muted", function(ev, eventArgs) {
video[0].muted = eventArgs.value;
})
video.on("volumechange", function() {
$.observable(data).setProperty("muted", video[0].muted);
});
這是jsfiddle的更新版本,其中包含以下更改: http : //jsfiddle.net/ck9sr49L/3/ 。
我打算在下一個JsViews中添加一個新功能,以便能夠選擇數據鏈接到HTML元素上的屬性,而不是對應的屬性。 語法為data-link="prop-muted{:...}"
(類似於與CSS屬性data-link="css-muted{:...}"
)。 通過該更新,您將能夠簡化事情並編寫以下內容:
模板:
<video autobuffer controls data-link="prop-muted{:muted}">
<source id="mp4" data-link="src{:src}" type="video/mp4"/>
</video>
<label>Muted: <input type="checkbox" data-link="muted"/></label>
碼:
var data = {
src: "http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4",
muted: true
};
var myTmpl = $.templates("#theTmpl");
myTmpl.link("#result", data);
$("video").on("volumechange", function(ev) {
$.observable(data).setProperty("muted", ev.target.muted);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.