0

私のコントローラーには、オープンアクションがあります。このアクションは、モデルのすべてのレコードを削除してから、ajaxリクエストを送信し、新しいモデルを取得してモデルを置き換えます。私のemberデータアダプターはLSAです

OlapApp.OpenController = Ember.Controller.extend({
needs: ['application'],
actions: {
    open: function() {
        var self = this;
        var xhr = $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            url: 'http://localhost:9095/service.asmx/getModel',
            data: '{}',
            success: function(response) {
                //Success Empty AxisModel;
                var data = JSON.parse(response.d);
                self.store.findAll('axisModel').then(function(items) {
                    console.log('try to delete');
                    items.forEach(function(item) {
                        item.deleteRecord();
                        item.save();
                    });
                });

                setTimeout(function() {
                    //Fill Axis Model
                    _.each(data.axisModel, function(v, i) {
                        var record = self.store.createRecord('axisModel', {
                            id: v["id"],
                            uniqueName: v["uniqueName"],
                            name: v["name"],
                            hierarchyUniqueName: v.hierarchyUniqueName,
                            type: v["type"],
                            isMeasure: v.isMeasure,
                            orderId: v.orderId,
                            isActive: v.isActive,
                            isAll: v.isAll,
                            sort: v.sort
                        });
                        record.save();
                    });
                    self.get('controllers.application').send('showNotification',     'Open', 'success');

                }, 2000);
            }
        });
    }
}
});

しかし、新しいモデルを作成しようとすると、次のエラーが発生します:

Assertion failed: The id a12 has already been used with another record of type OlapApp.AxisModel. 
Assertion failed: The id a13 has already been used with another record of type OlapApp.AxisModel. 

解決

最後に、解決策を見つけました。この問題を修正するには、次のように Ember.run.once で deleteRecord() をラップするだけです。

self.store.findAll('axisModel').then(function(items) {
                    items.forEach(function(item){
                          Ember.run.once(function(){
                           item.deleteRecord();
                         item.save();
                         });
                    });
                });
4

1 に答える 1