簡體   English   中英

無法使用余燼數據保存/更新記錄

[英]can't save/update record using ember-data

我的路由器定義以下內容:

this.resource('uoms', { path: '/uoms' }, function() {
    this.route('new');
});

uoms路由定義為:

App.UomsRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('uom');
    },

    actions: {
        save: function() {
            this.modelFor('uoms').save().then(function() {
                console.log("saved UOMs");
            });
        }
    }
});

但是由於某種原因,當我嘗試保存它時,我得到了:

未捕獲的TypeError:對象[object Object]沒有方法'save'

有人可以幫助我確定我在做什么錯嗎?

----更新----

我還從控制器嘗試了以下操作,但結果相同:

App.UomsController = Ember.ArrayController.extend({
    actions: {
        save: function() {
            this.get('model').save().then(function() {
                console.log("saved UOMs");
            });
        }
    }
});

----更新2 ----

查看this.get('model')調用返回的對象,我們得到以下信息:

這就是我要做的:

  • 使用Chrome開發者工具在您嘗試保存模型的行上設置斷點
  • 要檢查控制器持有的模型,請輸入Chrome開發者工具控制台this.get('model')

檢查控制台輸出是否確實是您期望的。 很有可能不是您要保存的模型實例。 您將在控制台中執行this.get('model').save()時看到相同的錯誤。

順便說一句:為什么要使用ArrayController而不是ObjectController 看起來您將其用於單個模型。 有關更多詳細信息,請參閱文檔

編輯:

試試this.get('model').get('transaction').commit()

我遇到的問題是我試圖在記錄數組而不是單個記錄上調用save() 出現此問題的原因是,我正在對單個記錄進行操作,但在ArrayController執行了此操作。 我認為這沒有什么錯,盡管可以說我應該創建一個名為“ edit”的子路由,然后假定我的代碼邏輯會起作用。

就是說,如果您想像我一樣做(也就是在ArrayController中保存單個記錄),那么此代碼將起作用:

save: function(id) {
    var promise = this.store.find('uom',id).then(function(uom){
        console.log(uom);
        uom.save();
    });
}

然后在模板中輸入如下內容:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" id}}></span>

這有效,但不是最佳答案。 相反,你可以在指定ArrayControllerObjectControlleritemController財產。 下面是使用此策略的save()deleteRecord()處理程序的示例:

App.PluralController = Ember.ArrayController.extend({
    itemController: 'singular'
});

App.SingularController = Ember.ObjectController.extend({
    actions: {
        save: function() {
            this.get('model').save();
        },
        deleteRecord: function() {
            this.get('model').deleteRecord();
            this.get('model').save();
        }
    }
});

然后,您需要對車把模板執行以下操作:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" this}}></span>
<span class="glyphicon glyphicon-remove-circle" {{action "deleteRecord" this}}></span>

暫無
暫無

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

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