2013-08-06 37 views
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应用程序中绘制嵌入对象的指南。如何更新Ember中的Flash嵌入对象?

+0

我不unders解决问题。当你改变src或value属性时,这些值不会更新? –

+0

HTML更新中的值。但是页面上的视频保持不变。 – StefanHayden

+0

我已经回答了这个问题。我的例子适合你吗? –

回答

0

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

+0

我明白你在说什么,但我不清楚如何做到这一点的细节。如果我有一个观点,我将如何着手在布局中交换旧视图的新视图? – StefanHayden

1

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

相关问题