我对 ember.js 还比较陌生,学习它仍然很痛苦。我正在使用 ember-rails gem,并将 Rails 用作 JSON API。
首先,我只是想构建一个能够显示记录列表(在本例中为电子邮件)的东西,并且能够添加新记录。我有 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
因此,使用上面的代码,我填写了文本框,单击提交按钮,似乎没有任何反应。但是,如果我回到我的收件箱页面,我可以看到我刚刚添加的记录(哇哦!),但它并没有通过 Rails 保留(hrmmm)——只要我刷新它就消失了。查看 Rails 日志,ember 似乎没有向 Rails 发送任何内容。
我觉得我只是在各种博客文章中尝试不同的行,而没有真正了解基本过程。我应该怎么做?我通读了 Ember 文档,虽然它们解释了基本概念,但使用 RESTAdapter 的工作示例很少。