0

我正在使用Ember.js支持的Rails for API工作在我的第一个Web应用程序中。 我有以下嵌套资源:当参数更改时,Ember.js路由不会执行新请求

this.resource('selection_processes', function() { 
    this.resource('selection_process', { path: '/:selection_process_id' }, function() { 
    this.resource('candidate', { path: '/candidates/:candidate_id' }); 
    }); 
}) 

所以,当我访问selection_processes/1它让所有的候选人。这没问题,但问题是当我点击另一个选择过程链接Ember不会执行新的请求,在我的模板中不呈现任何数据。顺便说一下,API正在返回正确的对象。

我得到这个工作的唯一方法是在我的序列化程序中包含所有对象,使得Ember在一个请求中获取整个嵌套资源的所有数据。但这似乎是一种懒惰的做法和“沉重的”。

顺便说一句,这里是我的路线:

Safira.SelectionProcessesRoute = Ember.Route.extend({ 
    model: function() { 
    return this.store.find('selection_process'); 
    } 
}); 


Safira.SelectionProcessRoute = Ember.Route.extend({ 
    model: function (params) { 
    return this.store.find('selection_process', params.selection_process_id); 
    } 
}); 


Safira.CandidateRoute = Ember.Route.extend({ 
    model: function (params) { 
    return this.store.find('candidate', params.candidate_id); 
    } 
}); 

UPDATE

这里是我的模型

Safira.SelectionProcess = DS.Model.extend({ 
    beginDate   : DS.attr('date'), 
    endDate   : DS.attr('date'), 
    title    : DS.attr('string'), 
    description  : DS.attr('string'), 
    steps    : DS.hasMany('Safira.Step', {async: true}) 
}); 

Safira.Step = DS.Model.extend({ 
    realization: DS.attr('date'), 
    title: DS.attr('string'), 
    candidates: DS.hasMany('Safira.Candidate', {async: true}), 
    selection_process : DS.belongsTo('Safira.SelectionProcess') 
}); 

Safira.Candidate = DS.Model.extend({ 
    name    : DS.attr('string'), 
    email    : DS.attr('string'), 
    confirmation_token : DS.attr('string'), 
    step    : DS.belongsTo('Safira.Step') 
}); 
+0

你能展示你的模型吗? – claptimes

+0

当然,我刚刚更新。 –

+0

您能否确认您的服务器正在返回候选ID?渲染时,你是在做什么像'{{#each steps}}'然后'{{#each candidates}}'?它渲染“steps”吗? – claptimes

回答

1

你必须在这两种情况下,通过相同的数据(当。你得到一个集合或个别项目)。 我想你是收集部分数据的情况下收集。 当你通过一个链接时,它假定它已经有该模型的数据,所以它不会发送新的请求。国际海事组织您应该能够访问在收集中收到的该模型的部分数据。

如果模型很大,则将其拆分为多个模型。它也需要服务器端的改变。

+0

嗯,明白了。我认为这是问题。谢谢,我会试一试。 –

相关问题