我刚开始使用Ember.js,并且想要实现一个非常简单的流程。何时调用createRecord以及如何处理商店交易
在总览屏幕上,我有一个新按钮,允许用户添加记录。保存后,用户返回到概览屏幕,在屏幕上他可以看到概览中新创建的记录。
用户导航到使用linkTo
{{#linkTo locations.new}} Insert location {{/linkTo}}
这触发其中准备了新的模式,以便它可以绑定到屏幕下面的路线“新记录”页面。
App.LocationsNewRoute = Ember.Route.extend({
model: function() {
return App.Location.createRecord();
}
});
新位置的屏幕车把模板看起来是这样的:
<script type="text/x-handlebars" data-template-name="locations/new">
<h1>New location</h1>
Latitude : {{view Ember.TextField valueBinding="latitude"}}
Longitude : {{view Ember.TextField valueBinding="longitude"}}
<p><button {{action addItem this}}>Add record</button></p>
</script>
如addItem实现这样的:
App.LocationsNewController = Ember.ObjectController.extend({
addItem: function(location) {
this.get("store").commit();
this.get("target").transitionTo("locations");
}
});
一对夫妇的问题,我有这个遭遇:
模特商店交易
- 只要用户导航(使用linkTo)到新的位置页面,就会创建一个空记录(使用createRecord)。我相信这是将控件绑定到模型所必需的。
- 我注意到,当用户填入纬度,但决定返回到概述(使用linkTo)时,部分填充的模型将被放入概述中。
- 刷新页面删除部分填充物
在Ember.js工作时...过渡到通过linkTo一条新的路径,并刷新在浏览器之间的区别是,我注意到这个有很多有时巨大。
问题:我需要使用什么模式来实现“添加新记录”流程。我只是想导航到一个新的屏幕,并有一个保存/取消按钮。我只想点击保存时添加的记录。应该只在单击Save时调用createRecord,但是如何绑定控件?
模式复制
当我的REST的服务做一个POST后返回以下(非ember.js标准)JSON(添加记录):
{
"latitude": "1.123",
"longitude": "1.123",
"accuracy": null,
"_id": "517d2dcf377dcffc11000009"
}
我有以下行为:
- 当用户填入纬度/经度并点击保存按钮时,他返回到总览以查找其新创建的记录在概述中两次。
- 单击保存后,控制台中显示一个错误:您的服务器返回了一个具有键纬度的散列,但您没有映射。
- 刷新页面摆脱了重复。
我能够做一个POST
{
"location": {
"latitude": "1.123",
"longitude": "1.123",
"accuracy": null,
"_id": "517d31457b40fcbc2a000003"
}
}
该应用程序后返回ember.js标准JSON来解决这个配置为我使用MongoDB的使用_id作为主键。
App.Adapter = DS.RESTAdapter.extend({
serializer: DS.RESTSerializer.extend({
primaryKey: function (type){
return '_id';
}
})
});
现在我可以理解为什么Ember.js抱怨纬度键(因为它是期待一个位置的根元素),但我不明白为什么它增加了模型两次集合(只使用1 POST)
所以2个问题:
- 什么是错我的流量,我该如何解决?
- 当REST API返回非ember.js标准JSON时,为什么最终会出现重复内容。
你在你的序列化'_id'配置'primaryKey'? – MilkyWayJoe 2013-04-28 16:47:58
你有没有找到解决这个问题的方法?我想我遇到类似的问题http://stackoverflow.com/questions/16670855/uncommitted-record-still-present-after-rollback – 2013-05-22 13:06:23