Ember.js视图在转换时消失

问题描述:

不知何故,即使在最简单的例子中,当我尝试转换到另一个状态/路由时,我想出一个视图会消失。Ember.js视图在转换时消失

我的索引路线是这样的:

--Application------------------------------- 
| --Header-------------------------------- | 
| | --ViewA----------------------------- | | 
| | | View A!       | | | 
| | |__________________________________| | | 
| |          | | 
| | --ViewB----------------------------- | | 
| | | View B!       | | | 
| | |__________________________________| | | 
| |______________________________________| | 
|           | 
| --Main---------------------------------- | 
| | I stay here, no matter what!   | | 
| |______________________________________| | 
|__________________________________________| 

只要我去了“下一步”的状态,ViewB消失,它看起来像这样:

--Application------------------------------- 
| --Header-------------------------------- | 
| | --ViewA----------------------------- | | 
| | | View A!       | | | 
| | |__________________________________| | | 
| |______________________________________| | 
|           | 
| --Main---------------------------------- | 
| | I stay here, no matter what!   | | 
| |______________________________________| | 
|__________________________________________| 

行为可以看出在这个例子中,应用程序http://jsfiddle.net/SAra5/4/

它看起来像被弄糊涂了,如果你没有指定它在新的路线上做任何事情,它就不会渲染所有的出口。 ake的东西正常工作将包括你想要的路线再次在NextRoute渲染。

App.NextRoute = Ember.Route.extend({ 
     renderTemplate: function() { 
     this.render('header', {'outlet':'header', 'into':'application'}); 
     this.render('main', {'outlet':'main', 'into':'application'}); 

     this.render('viewB', {'outlet':'viewB', 'into':'header'}); 
     this.render('viewA', {'outlet':'viewA', 'into':'header'}); 
    } 
}); 

如果你做的改变NextRoute之前交换this.render('viewB', {'outlet':'viewB', 'into':'header'});与索引路线this.render('viewA', {'outlet':'viewA', 'into':'header'});,你会看到它现在只呈现viewB!奇怪,是吧?虽然在当前时间点,但我不确定它是一个错误还是一个功能。

+0

这似乎是一个错误,因为这是IRC用户的另一个奇怪的例子。视图A和B现在在模板中引用,但现在'主要'模板消失了:http://jsfiddle.net/ianpetzer/Xdrje/ ps:哦,顺便说一句,我觉得DOM中没有任何变化,直到我明确告诉余烬这样做。我不能仅仅因为你改变状态而看到更新当前DOM的逻辑原因。 – 2013-02-15 11:21:05

+0

哦。如果你没有指定路由,看起来Route的最后一行会被忽略并且不会被重新渲染。见[this](http://jsfiddle.net/Xdrje/1/)jsfiddle。 – Deif 2013-02-15 11:24:20

+0

看起来像过去呈现的最后消失过渡到新状态。 – dmzza 2013-02-15 21:37:28

我不知道你的意图的行为,但它是更好地抽象出你IndexRoute,因为你需要在每一个路线相同,否则将被删除:http://jsfiddle.net/SAra5/5/

但是,您的例子似乎令人费解。我认为你的解决方案在于{{render}}。请看我的帖子在这里:Different rendering techniques in emberjs handlebars template

+0

正如你在上面的评论和回答中可以清楚地看到的那样,它只会删除通过this.render()添加的最后一个模板。这个例子背后的原因是在应用程序的生命周期内有一个“活着”的出口。我需要这样做,因为我有一个嵌入式闪存应用程序,它向用户的网络摄像机和相机请求许可,并且只应该询问一次。只要我不得不重新添加到dom它会再次要求许可。 – 2013-02-15 11:34:08

+0

作为临时解决方案,您可以使Flash应用程序不是Route中的最后一个'this.render'? – Deif 2013-02-15 15:38:39

+0

作为一种实际的解决方案,您可以使用'{{render}}'将Flash应用程序永久呈现在屏幕上,不是吗?奥特莱斯是变幻莫测的东西,你应该在他们之外放置持久的观点。 – Wildhoney 2013-02-15 16:23:47