나는 Rails와 ember.js (ember-rails gem을 통해)로 기본적인 reddit clone app를 만들고있다. 기본적으로 필자는 제대로 작동하는 레일스의 '포스트'모델/컨트롤러를 가지고 있지만 레일스 유효성 검사가 실패하더라도 엠버 포스트 모델의 액션을 생성 할 때 새 포스트를 추가 할 때 '포스트'인덱스 페이지로 이동하면 모든 게시물을 나열, 나는 그것을 볼 수 있습니다 (즉, ember 데이터를 지키고있다). 내가 그것을 새로 고칠 때,하지만 내가 백엔드에서 거부되면 삭제되도록 그 데이터를 제거하는 가장 좋은 방법은 궁금하네요? 또 다른 이상한 점은 단순히 posts/new 페이지로 이동하면 새로운 빈 게시물이 만들어지고 그 다음에 클라이언트 측에서 app/assets/javascripts/routes에 다음 파일이있는 것입니다.ember.js frontend에서 새 레코드를 지우는 방법 레일 검증 (422 오류)?
posts_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() { }
);
}
}
});
여기에 내가 에 데이터를 전송하는 데 사용할 노력하고있어 양식의 게시물/new.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입니다 : 자산/자바 스크립트/템플릿/글에서 다음
<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>
및/I는 index.hbs이
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에 약속에 추가 할 수있는 몇 가지 코드가 있어야한다고 생각하고 있어요 이것을 처리하기 위해, 그러나 나는 그것을 정말로 이해할 수 없다).
고맙습니다. 추가 정보가 필요하면 알려주세요.
감사처럼 보일 것이다 (또한 당신은 IsEmpty 함수 속성을 사용할 수 있습니다)! 일반적으로이 문제를 해결하는 가장 좋은 방법으로 간주됩니까? 레일즈 인증이 실패하자마자 레코드를 자동으로 삭제할 수 있는지 궁금합니다. 상황이 지금은 잘못된 레코드가 여전히 클라이언트에 쌓일 수 있으므로 데이터를 지우는 더 깨끗한 방법이 있는지 궁금합니다. – etdev
많은 코너 케이스가 있기 때문에 이것이 최선의 방법이라고 생각합니다. 레코드를 크레이트 할 때 언제 어디서 언제 삭제 또는 저장해야하는지 정의해야합니다. 성공하면 페이지 또는 다른 오류로 전환합니다. 오류 개체를 전달하고 백엔드에서 오류 메시지를 표시 한 다음 저장소 개체를 삭제할 수 있습니다. http://emberjs.com/api/data/classes/DS.Errors.html을 확인하십시오. – Stakoov