我正在使用 Rails 和 ember.js(通过 ember-rails gem)开发一个基本的 reddit 克隆应用程序。基本上我在 Rails 中有一个“帖子”模型/控制器可以正常工作,但是当我从 ember 帖子模型的创建操作添加新帖子时,即使它未能通过 Rails 验证,如果我随后转到“帖子”索引页面其中列出了所有帖子,我可以在那里看到它(即 ember 保留数据)。当我刷新它时它消失了,但我想知道清除该数据的最佳方法是什么,以便在后端拒绝时将其删除?另一个奇怪的事情是,只需转到帖子/新页面就会创建一个新的空白帖子,然后在客户端上可以看到,我在 app/assets/javascripts/routes 中有以下文件:
post_route.js:
RedditJp.PostsRoute = Ember.Route.extend({
model: function() {
return this.get('store').find('post');
}
});
posts_new_route.js:
RedditJp.PostsNewRoute = Ember.Route.extend({
model: function(){
return this.get('store').createRecord('post'); },
actions: {
create: function() {
var newPost = this.get('currentModel');
var self = this;
newPost.save().then(
function() { self.transitionTo('posts'); },
function() { }
);
}
}
});
这是我试图用来在posts/new.hbs 中提交数据的表单:
<h1> Add a post </h1>
{{#each error in errors.title}}
<p>{{error.message}}</p>
{{/each}}
<form {{action "create" on="submit"}}>
<div>
<label>
Title<br/>
{{input type="text" value=title}}
</label>
</div>
<div>
<label>
Address<br/>
{{input type="text" value=address}}
</label>
</div>
<div>
<label>
Vote count<br/>
{{input type="text" value=voteCount}}
</label>
</div>
<button>Save</button>
</form>
然后在 assets/javascripts/templates/posts/ 我有index.hbs:
<h1>Posts</h1>
<ul>
{{#each}}
<li>{{title}} at {{address}} vote count: {{voteCount}}</li>
{{else}}
<li>There are no posts.</li>
{{/each}}
</ul>
这是我的router.js:
RedditJp.Router.map(function() {
this.resource('posts', function() {
this.route('new')
});
this.resource('home', function() {
});
});
RedditJp.IndexRoute = Ember.Route.extend({
redirect: function(){
this.transitionTo('home')
}
});
我在想我可以在 posts/index.hbs 文件中添加一个检查,只显示不脏的记录,但必须有一种更清洁的方法,所以我想知道什么被认为是最佳实践这种情况(我想应该有一些代码可以添加到posts_new_route.js中的promise中来处理这个问题,但我不太明白)。
非常感谢!如果您需要任何其他信息,请告诉我。