javascript - Ember 数据 createRecord 不起作用 : "TypeError: undefined is not a function"

标签 javascript rest ember.js

我正在将 Ember 数据用于网络应用程序,一切都运行得非常顺利,直到我尝试使用“createRecord”保存一些新数据。

这是代码的要点:

App.Store = DS.Store.extend({
  adapter: DS.RESTAdapter.create({
    namespace: 'api'
  })
});

App.Training = DS.Model.extend({
  dateTimestamp: DS.attr('number'),
  dateTime: DS.attr('string'),
  dateDay: DS.attr('number'),
  dateWeekday: DS.attr('string'),
  dateMonth: DS.attr('string'),
  teacherId: DS.attr('number'),
  teacherFirstName: DS.attr('string'),
  teacherPhoneNumber: DS.attr('string'),
  teacherAvatarCss: DS.attr('string'),
  spotName: DS.attr('string'),
  spotNamespace: DS.attr('string'),
  spotId: DS.attr('number'),
  spotHasPicture: DS.attr('string'),
  spotPictureCss: DS.attr('string'),
  spotUrl: DS.attr('string')
});

我为后端构建了一个简单的 REST API,并且获取数据效果很好:

App.KalenderRoute = Em.Route.extend({
  model: function() {
    return this.store.find('training'); // This works!
  }
});

然后我尝试在 Controller 中调用一个操作来保存新记录:

App.KalenderController = Em.ArrayController.extend({
  actions: {
    addTraining: function(){
        var store = this.store;
        store.createRecord('training', {
            spotId: 5
        }); // This does not work :(
    }
  }
});

如果我理解正确的话,这应该使用 spotId 参数向/api/training 发送 POST AJAX 请求。然而,POST 请求似乎从未发送过,相反,我的控制台显示:

TypeError: undefined is not a function 

完整堆栈跟踪:

DS.Store.Ember.Object.extend.createRecord ember-data.prod.js:1575
App.KalenderController.Em.ArrayController.extend.actions.addTraining App.js:197
Mixin.create.send ember.prod.js:15207
runRegisteredAction ember.prod.js:34269
Backburner.run ember.prod.js:7947
apply ember.prod.js:7779
run ember.prod.js:6415
handleRegisteredAction ember.prod.js:34267
(anonymous function) ember.prod.js:22582
m.event.dispatch jquery.min.js:3
r.handle

有人知道这是为什么吗?这让我发疯!

最佳答案

自 Ember Data 1.0beta+ 版本以来,无需定义存储。您只需定义适配器和序列化器。

App.ApplicationAdapter= DS.RESTAdapter.extend({
  namespace: 'api'
});

App.Training = DS.Model.extend({
  dateTimestamp: DS.attr('number'),
  dateTime: DS.attr('string'),
  dateDay: DS.attr('number'),
  dateWeekday: DS.attr('string'),
  dateMonth: DS.attr('string'),
  teacherId: DS.attr('number'),
  teacherFirstName: DS.attr('string'),
  teacherPhoneNumber: DS.attr('string'),
  teacherAvatarCss: DS.attr('string'),
  spotName: DS.attr('string'),
  spotNamespace: DS.attr('string'),
  spotId: DS.attr('number'),
  spotHasPicture: DS.attr('string'),
  spotPictureCss: DS.attr('string'),
  spotUrl: DS.attr('string')
});

此外,在您调用保存记录之前,不会进行 ajax 调用

var record = this.store.createRecord('training',{
  spotId:1
});
record.save();

示例(为了好玩而延迟):http://emberjs.jsbin.com/OxIDiVU/856/edit

关于javascript - Ember 数据 createRecord 不起作用 : "TypeError: undefined is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24941332/

相关文章:

javascript - 为什么基于 ng-class 的 ng-animate 转换不起作用?

javascript - .parents() 在 Angular 中?

REST API - ALPS UI(类似 Swagger UI)

javascript - 计算模型的长度

javascript - Ember.js - jQuery-masonry + 无限滚动

javascript - react native : Text and Icon inline

javascript - 是否可以使用 javascript 实时检查 window.variable 对象

java - 在我的 REST Web 服务的服务层中使用 @EJB 或 @Inject 注入(inject) EJB?

security - 使用 Jersey 保护 Rest Web 服务

javascript - Ember 数据在模板中未定义,但可在控制台中访问