【问题标题】:EmberJS throws undefined after deleteRecord and saveEmberJS 在 deleteRecord 并保存后抛出 undefined
【发布时间】:2014-12-16 21:06:13
【问题描述】:

关于这个问题最后一部分的解决方案。

六个小时后...我无法删除 ember-data 对象而不会出错。 我已经关注了启动器video-tutorial。 对于删除,ember-docs 建议执行以下步骤:

post.deleteRecord();    
post.get('isDeleted');   
post.store.save();

我的适配器设置:App.ApplicationAdapter = DS.FixtureAdapter;

App.ApplicationRoute = Ember.Route.extend({
    model: function () {
    this.store.find('post', 1).then(function (post) {
    // success
    console.log(post.get('title'));
    post.deleteRecord();
    post.get('isDeleted');
    post.store.save();   <--------- ERROR, same with post.save()       
    // App.store.commit();
}, function (error) {
    // error handling
    console.log(error);
});

EmberJS 抱怨:Uncaught TypeError: undefined is not a function 我尝试了一些修改:

post.deleteRecord();
post.get('isDeleted');
App.store.commit();

和:

post.destroyRecord();

我更改了 EmberJS、Ember-Data 和 HandleBars 版本,并在 cdn 和 grunt 之间切换。我当前的版本是(bower.json):

"ember": "1.9.0",
"handlebars": "2.0.0",
"ember-data": "1.0.0-beta.8",

postmodel 和 postfixtures 如下所示:

App.Post = DS.Model.extend({
titel : DS.attr('string'),
bericht: DS.attr('string')
});


App.Post.FIXTURES = [
    { id: 1, titel: 'titel 1', bericht: 'bericht 1' ,},
    { id: 2, titel: 'titel 2', bericht: 'bericht 2' },
    { id: 3, titel: 'titel 3', bericht: 'bericht 3' }
];

更新 1

堆栈跟踪

Uncaught TypeError: undefined is not a function  ember.prod.js:15469 
(anonymous function)                             ember.prod.js:10127 
Cache.get                                        ember.prod.js:15509 
isPath                                           ember.prod.js:16307 
get                                              bower_components.js:8 Ember.Object.extend.serializeAttribute           bower_components.js:8 
(anonymous function)                             bower_components.js:9 
(anonymous function)                             ember.prod.js:14209 
Map.forEach.cb                                   ember.prod.js:14007 
OrderedSet.forEach                               ember.prod.js:14217 
Map.forEach                                      bower_components.js:9 
g.reopenClass.eachAttribute                      bower_components.js:9 
g.reopen.eachAttribute                           bower_components.js:8 
Ember.Object.extend.serialize                    bower_components.js:8 
g.extend.mockJSON                                bower_components.js:8 
g.extend.deleteRecord                            bower_components.js:9 
v                                                bower_components.js:10 
(anonymous function)                             ember.prod.js:12273 
forEach                                          bower_components.js:10 Ember.Object.extend.flushPendingSave             ember.prod.js:854 
Queue.invoke                                     ember.prod.js:919 
Queue.flush                                      ember.prod.js:724 
DeferredActionQueues.flush                       ember.prod.js:149 
Backburner.end                                   ember.prod.js:204 
Backburner.runember.                             prod.js:586 
executeTimersember.                              prod.js:575 
(anonymous function)                             ember.prod.js:575

更新 2
我做了一个小提琴,here

解决方案 3
可能,问题是由版本地狱引起的。我已将 ember-data 1.0.0-beta.8 更改为 ember-data 1.0.0-beta.12 。我在 Fiddle 上做了一个工作示例:here

【问题讨论】:

  • 您可能正在观看一个过时的视频。例如,commit 现在不再使用。
  • 好的,感谢您的帮助。现在可以使用 ember-data 1.0.0-beta.12

标签: ember.js ember-data


【解决方案1】:

你应该使用post.save(); 而不是post.store.save();

post.destroyRecord(); 也应该可以工作。

在这些调用中,您是否收到 Uncaught TypeError: undefined is not a function

如果是这样,你能显示更完整的堆栈跟踪吗?

【讨论】:

  • 我已经用控制台中的堆栈跟踪更新了我的问题。
  • 我搞定了。我在小提琴上做了一个工作示例:jsfiddle.net/wereldbolt/4rrnepwe。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多