我對ember.js比較陌生,而且仍然很痛苦地學習它。我正在使用ember-rails gem,並將Rails用作JSON API。ember.js - 無法提交表單數據
首先,我只是想建造的東西,會顯示結果列表(在這種情況下,電子郵件)與增加新的能力。我有UI設置和功能,並且ember從Rails API中提取電子郵件列表。我可以點擊郵件標題和它帶我到完整的電子郵件等
我的問題是添加新記錄。我設置了一個撰寫電子郵件表單,但在重新安排路由器和控制器中的代碼幾天之後,我仍然無法添加新記錄。我發現的每個例子似乎都提出了一種不同的交易方式,createRecords,.get('store'),.get('content'),然後通過某種行爲來提交細節。他們都沒有爲我工作。下面是感覺最接近我有:
商店
App.Adapter = DS.RESTAdapter.extend
serializer: DS.RESTSerializer.extend
primaryKey: (type) -> '_id'
App.Store = DS.Store.extend
revision: 11
adapter: 'App.Adapter'
電子郵件模式
App.Email = DS.Model.extend
from: DS.attr('string')
to: DS.attr('string')
subject: DS.attr('string')
body: DS.attr('string')
created_at: DS.attr('string')
撰寫路線
App.ComposeRoute = Ember.Route.extend
model:() ->
transaction = this.get('store').transaction()
email = transaction.createRecord(App.Email, {})
return email
events: {
save: (email) ->
email.get('store').transaction()
}
撰寫模板(削減了部分的HTML)
<label class="control-label" for="to">To</label>
{{view Ember.TextField valueBinding="to" id="to" placeholder="Your friend" required="true"}}
<label class="control-label" for="subject">Subject</label>
{{view Ember.TextField valueBinding="subject" id="subject" placeholder="What's it about?" required="true"}}
<label class="control-label" for="notes">Your message</label>
{{view Ember.TextArea valueBinding="body" id="body" placeholder="Your message"}}
<button class="btn btn-primary btn-large" {{action save this}}>Send email</button>
Rails的emails_controller.rb
class EmailsController < ApplicationController
# GET /emails.json
def index
render json: Email.all
end
# GET /emails/1.json
def show
email = Email.find(params[:id])
render json: email
end
# POST /emails.json
def create
email = Email.new(params[:email])
email.save
render json: email, status: :created
end
因此,與上面的代碼我填寫文本框,點擊提交按鈕,但是沒有一樣即將發生。但是,如果我回到我的收件箱頁面,我可以看到剛剛添加的記錄(woohoo!),但它不會通過Rails(hrmmm)持久保存 - 只要我刷新它就消失了。看着Rails日誌,ember似乎並沒有向Rails發送任何東西。
我覺得我兜兜轉轉只是試圖從不同的博客文章不同的線路並沒有真正理解的基本過程。我應該怎麼做?我已經閱讀了Ember文檔,並解釋了基本概念,但使用RESTAdapter的工作示例非常少。
謝謝 - 這是有道理的,我終於有東西被髮送到Rails!我收到了另一個錯誤:'未捕獲的錯誤:斷言失敗:您的服務器返回了一個帶有_id鍵的哈希,但是您沒有映射。「我們正在使用mongodb;我以爲我已經在商店中用'PrimaryKey:(type) - >'_id''對這個問題進行了排序。 – 2013-05-07 14:55:58
很酷。我的猜測是你的JSON格式不符合'RESTAdapter'的要求。您可能會錯過根{_id:'}而不是{email:{_id:1}} – 2013-05-07 15:00:47