我刚刚编写了一个非常简单的Ember应用程序,它构建在Rails应用程序之上,使用Ember Data并显示,创建和保留一个实体类型到服务器。一切都使用最新的工具(Ember v1.0.0-pre.4-134-gaafb5eb)。
然而,我遇到了一个非常奇怪的问题。我的应用程序有两个视图:实体列表(索引)和用于创建新实体的表单。当我直接输入索引时,一切都显示OK。但是当我转到另一个视图然后返回列表时,视图不会再次呈现。哪个可能是问题?
我想这可能是由于我(可能不正确)使用新的Ember路由器造成的。所以我在这里粘贴了一些应用程序的重要部分(从我的角度来看):
路由器:
App.Router.map(function() {
this.resource('bands', function() {
this.route('new');
});
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('bands');
}
});
App.BandsRoute = Ember.Route.extend({
model: function() {
return App.Band.find();
}
});
App.BandsNewRoute = Ember.Route.extend({
renderTemplate : function(){
this.render('bands_new',{
into:'application'
});
}
});
链接回列表 - 这不起作用:
App.BandsNewController = Em.ArrayController.extend({
cancel: function() {
this.transitionTo('bands');
}
});
在这里查看整个应用:https://github.com/pavelsmolka/roommating
(它受到了很棒的https://github.com/dgeb/ember_data_example)
我不相信,但它可能是Ember本身的错误吗?
答案 0 :(得分:4)
我认为你的BandsNewRoute中的“渲染”调用搞乱了。试着用Ember默认值来做更多事情。所以我会重构你的应用程序来做到这一点:
(工作小提琴:http://jsfiddle.net/andremalan/DVbUY/)
您需要做的就是创建一个“乐队”模板(除了{{outlet}}(如果需要),它可以完全为空)和“bands.index”模板。
<script type="text/x-handlebars" data-template-name="application">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="bands/index">
<h2>Bands Index</h2>
{{#linkTo bands.new}}New Band{{/linkTo}}
</script>
<script type="text/x-handlebars" data-template-name="bands">
<h1>Bands</h1>
<p>
{{#linkTo index}}Start Again{{/linkTo}}
{{#linkTo bands.new}}New Band{{/linkTo}}
</p>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="bands/new">
I'm in new band!
<a {{action "cancel"}}>Cancel</a>
</script>
你的路线也很好地用这种方式清理:
App.Router.map(function() {
this.resource('bands', function() {
this.route('new');
});
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('bands');
}
});
App.BandsNewController = Ember.Controller.extend({
cancel: function() {
this.transitionTo('bands');
}
});
我希望有所帮助!