在某些浏览器中,您无法更新嵌入的src网址。为此,您需要删除整个元素,克隆,更改src url,然后再次追加。
在嵌入中做到这一点很容易,只需使用view.rerender
,并将dom替换为新副本。
唯一的诀窍是:创建一个包装嵌入视图的视图。从包装视图中,我们称之为rerender
。所以我们在接下来的调用中不会丢失观察者。
的视图实现
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>
我创建了一个现场演示,展示这方面的工作here
我不unders解决问题。当你改变src或value属性时,这些值不会更新? –
HTML更新中的值。但是页面上的视频保持不变。 – StefanHayden
我已经回答了这个问题。我的例子适合你吗? –