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

嗯,明白了。我認爲這是問題。謝謝,我會試一試。 –

相關問題