一部のブラウザでは、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>
ここでこれが機能することを示すライブデモを作成しました