13

次のようなルートでコンテンツが定義されている ArrayController があります。

App.UsersRoute = Ember.Route.extend({
  model: function() {
    return App.User.find();
  },

  setupController: function(controller, model) {
    this._super(controller, model);
    this.controllerFor('application').set('currentRoute', 'users');
  }
});

そして、テンプレートにデータをリストします。

<ul>
  {{#each user in arrangedContent}}
  <li>
    {{user.lastName}} {{user.firstName}}
    {{#linkTo "users.edit" user class="btn btn-primary btn-small"}}EDIT{{/linkTo}}
  </li>
  {{/each}}
</ul>

それは正常に動作します。

新しいアイテムを作成すると、テンプレートのリストに自動的に追加されます。

App.UsersNewRoute = Ember.Route.extend({
  model: function() {
    return App.User.createRecord({firstName: '', lastName: ''});
  }
});

しかし、「編集」ビューでアイテムを削除すると、機能しません:

App.UsersEditController = Ember.ObjectController.extend({
  ...

  destroy: function() {
    this.get('content').deleteRecord();
    this.get('store').commit();
    this.transitionToRoute("users.index");
  }
});

しかし、「新規」ビューでは、新しく作成されたアイテムを削除すると、(コミットなしで) 機能します。

エディットコントローラーで「commit」を外すとリストが更新されるのですが、別のアクションをするとリストがリロードされ、削除した項目が再表示されます(正常)。

では、アイテムを削除するにはどうすればよいでしょうか。

注: 私は、ember と ember-data の「マスター」コードを使用し、今更新しました。

4

2 に答える 2

1

また、コミットは非同期で行われるため、レコードが削除された後にのみ移行する必要があります。

var user = this.get("content");

user.one("didDelete", this, function() {
  this.transitionTo("users.index");
});

user.deleteRecord();
user.get("transaction").commit();

また、トランザクションのコミットは、ストアのコミットよりも優先されることに注意してください。後でレコードを独自のトランザクションに追加することを決定した場合、行う作業は少なくなります。そうしない場合でもdefaultTransaction、ストアをコミットするのと同じように使用されます。

于 2013-03-16T09:30:22.063 に答える