1

私は、Rails と ember.js (ember-rails gem 経由) を使用した基本的な reddit クローン アプリに取り組んでいます。基本的に、Rails には正しく動作する「投稿」モデル/コントローラーがありますが、ember 投稿モデルの作成アクションから新しい投稿を追加すると、Rails 検証に失敗した場合でも、「投稿」インデックス ページに移動するとすべての投稿が一覧表示され、そこに表示されます (つまり、ember がデータを保持しています)。更新すると消えますが、バックエンドから拒否されたときにデータが削除されるように、そのデータをパージする最良の方法は何ですか? もう1つの奇妙なことは、投稿/新しいページに移動するだけで新しい空の投稿が作成され、クライアント側で表示されることです。次に、app/assets/javascripts/route に次のファイルがあります。

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 の promise に追加できるコードがいくつかあるはずだと考えていますが、よくわかりません)。

どうもありがとう!また、追加情報が必要な場合はお知らせください。

4

1 に答える 1

0

テンプレートでモデルが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(); });

于 2014-09-10T16:18:36.510 に答える