簡體   English   中英

在Rails驗證失敗(422錯誤)后,如何從ember.js前端清除新記錄?

[英]How to clear a new record from ember.js frontend after it fails Rails validation (422 error)?

我正在使用Rails和ember.js開發一個基本的reddit克隆應用程序(通過ember-rails gem)。 基本上,我在Rails中有一個“發布”模型/控制器,它可以正常工作,但是當我從余燼發布模型的create操作添加新發布時,即使它未通過Rails驗證,也可以轉到“發布”索引頁面其中列出了所有帖子,我在那里可以看到它(即,炭燼保留了數據)。 當我刷新時,它消失了,但是我想知道清除數據的最佳方法是什么,以使它在被后端拒絕時被刪除? 另一個奇怪的事情是,只需轉到帖子/新頁面就會創建一個新的空白帖子,然后在“空白”中可見。然后在客戶端,我在app / assets / javascripts / routes中具有以下文件:

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() { }
        );
    }
  }
});

這是我試圖用來在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中添加一些可以解決這個問題的代碼,但是我不太清楚)。

非常感謝! 並告訴我您是否需要任何其他信息。

您可以檢查模板中的模型isNew是否隱藏新記錄(也可以使用isEmpty屬性)

    var record = store.createRecord('model');
record.get('isNew'); // true

record.save().then(function(model) {
  model.get('isNew'); // false
});

模板中的外觀類似於{{each model}} {{#if model.get('isNew')}}

record.save().then(function(){ // Success callback }, function() { model..deleteRecord(); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM