Ember.js:如何保存模型

Posted

技术标签:

【中文标题】Ember.js:如何保存模型【英文标题】:Ember.js: how to save a model 【发布时间】:2013-01-22 09:46:06 【问题描述】:

从 ember 文档中可以清楚地看到,您应该能够保存脏模型

var m = App.MyModel.find(10) ;
...
m.set("firstName", "John") ;
m.get("isDirty") ; // --> true

现在,我不知道如何保存,比如

m.save() ;
App.MyModel.save(m) ;
//etc

不工作。有什么建议吗?

干杯

【问题讨论】:

【参考方案1】:

自 Ember Data 1.0(撰写本文时为测试版)发布以来,已接受的答案不再有效。使用 Ember Data (1.0) 可以更轻松、更直观地进行保存。

var person = this.store.createRecord('person');
person.set('frist_name', 'John');
person.set('last_name', 'Doe');
person.save();

知道save 调用返回一个promise 也很好,当服务器返回响应时该promise 被解析。

person.save().then(function() 
  // SUCCESS
, function() 
  // FAILURE
);

【讨论】:

【参考方案2】:

编辑:这在 Ember Data 1.0 beta 及更高版本中已经过时,请参考 Bart 的回答

如果您使用的是 Ember-Data,则需要在模型的事务上调用 commit()

m.get('transaction').commit()

或者如果您想保存应用中的每个脏对象

m.get('store').commit()

【讨论】:

还有一件奇怪的事情,如果我创建一个新模型并尝试像这样保存它: var p = App.Post.createRecord(firstName: "bla", lastName: "blabla" ); p.get("事务").commit();此调用创建的请求是对 localhost/~ME/posts 的 GET 真是奇怪,你有没有自定义适配器?应该是对/posts的 POST 请求 是的,我已经扩展了 RESTAdapter,因为我必须设置“命名空间”: App.Adapter = DS.RESTAdapter.extend(namespace: '~User123');有什么办法可以解决这个问题吗?如果是这样,这是否记录在案? 不,您必须对适配器进行一些认真的重写才能将您的 POST 请求作为 GET 请求发送,您确定您没有一些中间件或可能会转换它们的东西吗? 我的错误,我现在确实看到了 POST,由于某种原因,它没有显示在我的控制台中,只有 POST 之后完成的 GET。所以commit()先做一个POST然后再做一个GET,为什么?

以上是关于Ember.js:如何保存模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ember JS 中获取模型数据

不要使用Ember.js从服务器获取新数据

Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

如何使用 ember.js 访问嵌套索引路由中的父模型?

Ember.js:如何加载音频文件