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 - 如何在同一页面中使用多个模型、控制器和视图?