在编写我的第一个Ember-app的过程中,我无法弄清楚如何使用REST适配器将新资源发布到我的API。
该应用程序成功检索资源列表并显示它,因此我的模型似乎已正确定义,并且适配器和API之间的通信正常工作。当我单击CreateBugView按钮时,新实例将显示在列表中,因此该部分也可以正常工作。但是,我可以在检查器中看到没有对API发出POST请求,当我刷新页面时,可以预见这个实例无处可见。
我使用的是Ember的1.0.0-rc.1版本以及我今天克隆和构建的Ember Data版本。
以下是我的代码,我很感激能帮助我找出错误的人。
App = Em.Application.create()
# Templates
require 'templates/application'
require 'templates/index'
# Models
App.Bug = DS.Model.extend
name: DS.attr 'string'
# Views
App.CreateBugView = Em.View.extend
tagName: 'button'
click: (evt) ->
bug = App.Bug.createRecord
name: 'Sean'
# Routes
App.IndexRoute = Em.Route.extend
model: -> App.Bug.find()
setupController: (controller, bugs) ->
controller.set 'bugs', bugs
controller.set 'App', App
# Store
App.Store = DS.Store.extend
revision: 12
# Router
App.Router.map ->
@route 'index', path: '/'
App.initialize()
索引模板
<ul>
{{#each bugs}}
<li>{{name}}</li>
{{/each}}
</ul>
{{#view App.CreateBugView}}
Create new bug!
{{/view}}
答案 0 :(得分:1)
我相信只有在商店调用commit()后才会保留模型。
显然,如果不构建REST api,我无法完全测试,但是使用fixture适配器,我可以在我的控制器上调用save()方法,这会推送@ store.commit()。对于rest适配器,这应该产生POST事件。
请看看这个jsFiddle: http://jsfiddle.net/nrionfx/uqRG5/5/
click: (evt) ->
bug = App.Bug.createRecord
name: 'Sean'
@.get('controller').save()
和
App.IndexController = Em.ArrayController.extend
save: ->
console?.log("Commiting changes to store")
@store.commit()