1

システム内のすべての測定単位をリストするコントローラーがあります。ユーザーがモデル内の特定のレコードを選択したときに、Uomそれを削除できるようにしたいと考えています。Ember-Data beta-2 を使用しています。これが私がこれまでに持っているものです:

App.UomsController = Ember.ArrayController.extend({
    actions: {
        deleteRecord: function(id) {
            console.log("deleting: " + id);
            var promisedDelete = this.store.find('uom',id).then(function(uom){
                uom.deleteRecord();
            });
        }
    }
});

deleteRecord有効な ID を渡すアクションが呼び出され、promise が返されます。promiseの機能を使用して、promise が実行され、ローカルで動作しているように見えthen()たら、Ember を呼び出します。deleteRecord()このレコードが画面と Ember Debugger からすぐに消えるからです。残念ながら、削除はバックエンドに永続化されておらず、ページをリロードすると、ローカルで「削除された」レコードがすぐに返されます。

私の質問は次のとおりです。

  1. これは、ローカル削除を実行する合理的な方法ですか?
  2. 削除をバックエンドに保持するにはどうすればよいですか?
4

3 に答える 3

10

uom.save()を呼び出した後、変更をバックエンドに永続化するには、を呼び出す必要がありuom.deleteRecord()ます。

あなたがしていることはうまくいくかもしれませんが、少し複雑に思えます (たとえばthis.store.find('uom',id)、バックエンドへの不要なリクエストが発生します)。これを試して:

App.UomsItemController = Ember.ObjectController.extend({
    actions: {
        deleteRecord: function() {
            this.get('model').destroyRecord();
            // .destroyRecord() only exists in recent versions of ED
            // for previous versions use .deleteRecord() followed by .save()
            // (though you should really consider upgrading :))
        }
    }
);

App.UomsController = Ember.ArrayController.extend({
    itemController: 'uoms_item'
});

テンプレートには次のようなものがあります。

{{#each content}}
    {{name}} <a href="#" {{action "deleteRecord" this}}>Delete</a>
{{/each}}

以下のコメントに答えるために編集してください:this.get('model')が約束を返す場合、次のように動作するはずです。

        deleteRecord: function() {
            this.get('model').then(function(item) {
                item.destroyRecord();
            })
        }
于 2013-09-25T18:28:48.480 に答える
8

ember-data v1.0.0-beta.4 では、1 回の呼び出しで削除と保存を行う destroyRecord メソッドが追加されました。次のように使用できます。

   this.get('model').destroyRecord().then(function() {
      router.transitionTo('users');
   });
于 2014-01-31T08:03:13.303 に答える
3

このメソッドは、クラスdeleteRecordの任意のインスタンスで呼び出すことができます。ストアDS.Modelからレコードを削除しますが、バックエンドには保持されません。

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.deleteRecord(); }); } } });

バックエンドで削除を永続化するには、そのレコードで save メソッドを呼び出す必要があります ( createRecord() の後に save() を実行してバックエンドにレコードを保存するのと同じ) :

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.deleteRecord(); uom.save(); //The deletion will persist now }); } } });

または、削除を永続化するクラスdestroyRecord()のメソッドを使用することもできます。DS.Model

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.destroyRecord(); }); } } });

于 2014-10-07T05:15:21.107 に答える