我剛開始使用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