我有一个Ember路由从商店中获取它的模型(ember-data),然后需要从服务器重新加载它以填充未在index
动作上发送的属性。
为实现这一点,我在路由器中添加了afterModel
挂钩,并调用model.reload()
。在用户界面中,它的工作非常出色; index操作使用部分数据加载所有项目,然后单击详细信息从服务器请求其余属性。
但是,当我尝试使用capybara-webkit或selenium运行集成测试时,路由不会转换。网址会更改,但不会呈现新视图。
我在路由中的console.log
,model
和afterModel
操作中添加了setupController
个语句; model
操作似乎没有触发。但是,如果我从路由器中删除afterModel
挂钩,model
仍然不会触发,但路由正常转换。作为网络浏览器中的用户,model
,afterModel
和setupController
都会触发,并且路线会以完全填充的模型进行转换。
路由器代码:
Prm.LeadRoute = Ember.Route.extend
setupController: (controller, model) ->
console.log 'setupController'
@controllerFor('newNote').set('model', @store.createRecord('note'))
@controllerFor('newCustomLeadEmail').set('model', @store.createRecord('customLeadEmail'))
@controllerFor('newLeadQuote').set('model', @store.createRecord('leadQuote'))
console.log model
console.log model.get('id')
model.reload()
controller.set('model', model)
model: (params) ->
console.log 'model'
selectedLead = @store.find('lead', params.lead_id)
@controllerFor('property').set('selectedLead', selectedLead)
selectedLead
afterModel: (model) ->
console.log 'afterModel'
model.reload()
deactivate: ->
@controllerFor('property').set('selectedLead', null)
编辑:这是'过渡代码'。没什么特别的;我们只是点击链接并让Ember路由器处理网址:
<h2 {{action 'selectLead' lead}}>
{{#linkTo 'lead' lead}}{{unbound bookingRequestName}}{{/linkTo}}
</h2>