如何为 jsviews 创建自定义属性处理程序?
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 specifications - attribute "muted" may or may not be. That is, to should behave as an attribute of a disable
here: Data-linking the disabled and title attributes.
也许有一些方法可以自定义(替换)jsviews 中的标准 html 属性处理程序?
当 muted
为 false
时,您可以删除 muted 属性,方法是:
<video autobuffer controls data-link="muted{:muted||null}">
然而,这不会让事情如您所愿,因为动态删除或添加静音属性实际上不会 mute/unmute 视频控件。为此,您需要将静音元素上的静音 属性 设置为 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 中添加一个新功能,以便能够选择数据-link 到 HTML 元素上的 属性,而不是相应的属性。语法将是 data-link="prop-muted{:...}"
(类似于 data-linking 到 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);
});
我想用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 specifications - attribute "muted" may or may not be. That is, to should behave as an attribute of a disable
here: Data-linking the disabled and title attributes.
也许有一些方法可以自定义(替换)jsviews 中的标准 html 属性处理程序?
当 muted
为 false
时,您可以删除 muted 属性,方法是:
<video autobuffer controls data-link="muted{:muted||null}">
然而,这不会让事情如您所愿,因为动态删除或添加静音属性实际上不会 mute/unmute 视频控件。为此,您需要将静音元素上的静音 属性 设置为 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 中添加一个新功能,以便能够选择数据-link 到 HTML 元素上的 属性,而不是相应的属性。语法将是 data-link="prop-muted{:...}"
(类似于 data-linking 到 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);
});