2015-12-17 67 views
1

我在一個燼器1.12.1 - > 1.13.11和燼器數據1.0.0-beta.19.1 - > 1.13.15更新中。我以前有一個模板:Ember更新導致模板中的承諾不會等待解決

{{a-component parent=model.parent}} 

和組件

parentChanged: on('init', observer('parent', function() { 
    var parent = this.get('parent'); 
    if (parent) { 
    parent.get('child').then(child => { 
     this.set('child', child); 
    }); 
    } 
})) 

這以前的工作,但更新後,childthen電話後不確定。我必須將其更改爲

parentChanged: on('init', observer('parent', function() { 
    var parent = this.get('parent'); 
    if (parent) { 
    parent.then(parent => { 
     parent.get('child').then(child => { 
     this.set('child', child); 
     }); 
    }); 
    } 
})) 

使其恢復到更新之前的狀態。

有誰知道這是爲什麼?看起來模板停止解決更新後的承諾。

+1

我的賭注是關於未記錄的行爲我不認爲第一個版本應該永遠不會工作,因爲你將承諾傳遞給組件,並且你沒有在模板中使用它,所以它不會等待它解決以便它能夠兌現承諾。 也可能沒有關係,但我的建議是將所有承諾處理的東西放在控制器/路由(或組件)中,{{a-component}}所在的位置。因此,'a-component'已經得到了解決的價值,而不是承諾。可能會讓你的生活更輕鬆。 – Piotr

+0

我非常同意這段代碼需要重構。所以如果我在模板中有其他的東西,例如'{{b-component child = model.parent.child}}',它可能會作爲其他組件的副作用? –

+0

它可能工作,不知道:)我根本沒有真正依賴這種行爲,而是optet來處理路由器或父組件中的承諾,但是如果您可以回發的話,您可以試試它會對結果感興趣。 – Piotr

回答

0

交聯https://github.com/emberjs/ember.js/issues/12732

所以一些挖掘和攝製http://emberjs.jsbin.com/ququdenari/edit?html,js,output後,我無法在1.12.1初始工作情況只承諾工作。這讓我相信這可能是燼數據設定關係承諾的方式,而且自從我從1.0.0-beta.19.1更新到1.13.15時,任何突破性變化都是公平的遊戲。

總之,我更好地理解這個問題是我的目標。

編輯:

我做了一個插件ember-resolve-promise-helper幫助抽象這個問題出你的代碼。