【问题标题】:Ember - Record ID not returned (null) after successful insertion to the backendEmber - 成功插入后端后未返回记录 ID(空)
【发布时间】:2014-01-02 08:51:05
【问题描述】:

您好,感谢您抽出宝贵时间回答我的问题。

我的控制器中有以下代码:

.
.
.

var project = this.store.createRecord('project', {
                name: projectName,
            });

            project.save();
            alert(project.get('id') + project.get('name'));
.
.
.

这会将记录成功添加到数据库中,并且前端会自动刷新以反映这些更改。但是,当执行警报时,只打印名称。

对于 ID,我得到空值。

基本上我需要获取记录成功后从服务器返回的id值。我检查了返回的 JSON:

{"project":{"id":6,"name":"dfgdgf", "created_at":"2014-01-02T08:37:57.491Z","updated_at":"2014-01-02T08:37:57.491Z"}}

所以 id 字段包含在 json 响应中。会不会因为服务器还返回了ember模型中没有的两个字段(created_at和updated_at)而出现问题??

非常感谢!

编辑:

我在 ember 的模型中包含了 created_atupdated_at,但当我尝试调用 project.get('id'); 时仍然为空

有什么建议吗?

谢谢

【问题讨论】:

  • 服务器的数据是异步返回的,所以实际上需要使用回调函数并调用alert,或者在该函数中使用返回的数据。
  • @melc,你能给我指个链接吗?
  • 当然,可能的解决方案可以在这些线程中找到,stackoverflow.com/questions/19574133/…stackoverflow.com/questions/17790671/…
  • melc,您可以发表您的评论作为答案,我会将其标记为正确。谢谢!不知道这是一个已知的错误

标签: json ember.js ember-data


【解决方案1】:

服务器的数据是异步返回的,所以需要使用回调函数并调用alert,或者在该函数中使用返回的数据。

可能的解决方案可以在以下线程中找到,

is handling custom server side errors in ember-data when saving model possible

Get Ember-Data REST response value

【讨论】:

  • 感谢您的回答!欣赏它。为什么你认为在 ember 中实现 save() 函数以使其同步工作如此困难?
  • @Dragan 实际上这就是 ajax 请求的工作方式,调用具有异步响应的服务器。这意味着在所有情况下都需要回调函数来处理响应。在 ember-data 中,此行为包含在框架的特定回调中。
  • ajax 调用有一个属性 async : true/false 可以改变调用的性质。如果将 async 设置为 false,主 UI 线程会阻塞
  • @Dragan 确实不想让你混淆,但很高兴你注意到了。尽管 asynch false 是一种选择,但就系统和用户体验性能而言,这确实是一种不好的做法。 developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…
【解决方案2】:
var project = this.store.createRecord('project', {
    name: projectName,
});

project.save().then(function(projectResponse) {
    alert(projectResponse.get('id') + projectResponse.get('name'));
});

这肯定行得通! :)

【讨论】:

    【解决方案3】:
     savePerson: function(hash){
         return this.store.createRecord('agents/person', hash).save();
        },
    
    
      var hash = {
                          given_name : firstname,
    
             };
    
      this.savePerson(hash).then(function(record){
                    var personModelId = record.get('id');
    

    我的就是这样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2023-03-14
      • 1970-01-01
      • 2016-11-26
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多