在某些浏览器中,您无法更新 embed 的 src url。为此,您需要删除整个元素、克隆、更改 src url,然后再次追加。
嵌入很容易,只需使用view.rerender
, dom 将被新副本替换。
唯一的技巧是:创建一个包含嵌入视图的视图。从包装器视图中,我们将rerender
. 所以我们不会srcChanged
在下一次调用中失去观察者。
视图实现
App.VideoView = Ember.View.extend({
templateName: 'video',
embedView: Ember.View.extend({
src: null,
templateName: 'embed',
srcBinding: 'parentView.src',
viewName: 'embed'
}),
src: null,
srcChanged: function() {
this.get('embed').rerender();
}.observes('src')
});
模板
<script type="text/x-handlebars" data-template-name="video">
{{view view.embedView}}
</script>
<script type="text/x-handlebars" data-template-name="embed">
<object width="640" height="390">
<param name="movie" {{bindAttr src="view.src"}} ></param>
<param name="allowScriptAccess" value="always"></param>
<param name="playerapiid" value="main"></param>
<embed {{bindAttr src="view.src"}} type="application/x-shockwave-flash" allowscriptaccess="always" width="640" height="390"></embed>
</object>
</script>
用法:
<script type="text/x-handlebars" data-template-name="your-template">
...
{{view App.VideoView srcBinding="currentSource"}}
...
</script>
我创建了一个现场演示,展示了这里的工作