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!奇怪,是吧?虽然在当前时间点,但我不确定它是一个错误还是一个功能。
我不知道你的意图的行为,但它是更好地抽象出你IndexRoute
,因为你需要在每一个路线相同,否则将被删除:http://jsfiddle.net/SAra5/5/
但是,您的例子似乎令人费解。我认为你的解决方案在于{{render}}
。请看我的帖子在这里:Different rendering techniques in emberjs handlebars template
正如你在上面的评论和回答中可以清楚地看到的那样,它只会删除通过this.render()添加的最后一个模板。这个例子背后的原因是在应用程序的生命周期内有一个“活着”的出口。我需要这样做,因为我有一个嵌入式闪存应用程序,它向用户的网络摄像机和相机请求许可,并且只应该询问一次。只要我不得不重新添加到dom它会再次要求许可。 – 2013-02-15 11:34:08
作为临时解决方案,您可以使Flash应用程序不是Route中的最后一个'this.render'? – Deif 2013-02-15 15:38:39
作为一种实际的解决方案,您可以使用'{{render}}'将Flash应用程序永久呈现在屏幕上,不是吗?奥特莱斯是变幻莫测的东西,你应该在他们之外放置持久的观点。 – Wildhoney 2013-02-15 16:23:47
这似乎是一个错误,因为这是IRC用户的另一个奇怪的例子。视图A和B现在在模板中引用,但现在'主要'模板消失了:http://jsfiddle.net/ianpetzer/Xdrje/ ps:哦,顺便说一句,我觉得DOM中没有任何变化,直到我明确告诉余烬这样做。我不能仅仅因为你改变状态而看到更新当前DOM的逻辑原因。 – 2013-02-15 11:21:05
哦。如果你没有指定路由,看起来Route的最后一行会被忽略并且不会被重新渲染。见[this](http://jsfiddle.net/Xdrje/1/)jsfiddle。 – Deif 2013-02-15 11:24:20
看起来像过去呈现的最后消失过渡到新状态。 – dmzza 2013-02-15 21:37:28