3
    <object width="640" height="390"> 
    <param name="movie" {{bindAttr src="value"}} ></param>
    <param name="allowScriptAccess" value="always"></param>
    <param name="playerapiid" value="main"></param>
    <embed {{bindAttr src="src"}} type="application/x-shockwave-flash" 
    allowscriptaccess="always"
    width="640" height="390"></embed>
    </object>

所以我绑定了嵌入文件所在位置的属性,但是当 HTML 更新为 n 值时,嵌入对象(在本例中为 youtube 视频)不会改变。我找不到任何关于如何在 ember 应用程序中绘制嵌入对象的指南。

4

2 回答 2

1

在某些浏览器中,您无法更新 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>

我创建了一个现场演示,展示了这里的工作

于 2013-08-11T21:59:24.813 回答
0

更新嵌入对象上的 src 不会导致嵌入对象重新加载。它仅在初始化嵌入对象时使用。你需要替换整个东西,我建议创建一个组件/视图并换出视图而不是 src 值。

于 2013-08-06T03:18:56.753 回答