我对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