簡體   English   中英

模板訪問Ember Data hasMany屬性時處理拒絕的諾言

[英]Handle rejected promise when Ember Data hasMany property is accessed by template

當'findHasMany'調用失敗時,是否存在處理錯誤的標准方法? 用例:

Model: App.User
{
DS.hasMany('comments', {'async': true});
}

模板

{{#each comment in comments}}
<p>{{comment.title}}</p>
{{/each}}

問題是,當由於某些服務器問題而導致延遲加載注釋失敗時,我希望能夠響應UI中的該錯誤(通過路由到其他地方,在頁面上顯示有關錯誤的彈出窗口等)。 。 目前,諾言只是拒絕。 我以為Ember Data在類似的情況下可能會在ManyArray上掛上一些鈎子,但似乎沒有,而且在這種情況下,商店似乎並沒有明確定義要執行的操作: https : //github.com /emberjs/data/blob/v1.0.0-beta.8/packages/ember-data/lib/system/store.js#L1758-給了promise一個'resolve'方法,但沒有拒絕方法。

我的選擇似乎是子類化商店,然后在其中添加一些拒絕代碼,或者子類化DS.PromiseArray並觀察“ isRejected”屬性。 任何想法都將受到歡迎!

編輯:這個問題似乎可以歸結為以下事實:處理路由中定義的模型時,Ember和Ember Data可以很好地協同工作(您可以在錯誤操作中捕獲拒絕的Promise),沒有直接通過模板。 一種解決方案可能是在控制器中讓觀察者觀察諸如“ model.isError”之類的東西,但是失敗的hasMany關系不會觸發擁有模型的錯誤。 我想我可以做“ comments.isRejected”,但同樣,我必須為具有模型具有hasMany關系的每個控制器(換句話說,所有這些)編碼,這似乎不太令人滿意。 如果模型具有可觀察的可枚舉屬性(例如“ hasManyIsError”:{comments:false,posts:true}),那么使用'hasManyIsError.length可以很容易地觀察其中的任何一個。

假設已獲取一個名為user的var,您可以這樣做:

var itWorked = function(comments) { return comments; }
var itFailed = function(error) { return error; }

user.get("comments").then(itWorked, itFailed);

async:true表示它將使用諾言...因此您可以使用...然后就不能在未指定async:true的關系上這樣做。

[edit]對不起,我只是意識到,在注釋請求失敗時,放在itFailed函數中的任何內容可能都不是顯而易見的事情,對於itWorked來說,反之亦然... :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM