你這樣做的方式將會因爲承諾而變得可用。讓我看看我是否可以分解它。
這裏是表示在過濾作用將是可用的很長的路要走:
var rolesPromise = this.get('session.user.roles');
var filteredRolesPromise = rolesPromise.then(function (roles) {
return roles.filterBy('propertyName', 'propertyValue');
});
filteredRolesPromise.then(function(filteredRoles){
// available here
console.log(filteredRoles.get('length'));
});
這裏是表示在過濾作用將可短方式:
this.get('session.user.roles').then(function (roles) {
var filteredRoles = roles.filterBy('propertyName', 'propertyValue');
// available here
console.log(filteredRoles.get('length'));
});
或
var foo = this.get('session.user.roles').then(function (roles) {
return roles.filterBy('propertyName', 'propertyValue');
}).then(function(filteredRoles){
// available here
console.log(filteredRoles.get('length'));
});
將屬性返回給承諾只是使其可用於下一個承諾,它不會將其分配給變量(此處爲foo
)。
在這裏,這有助於承諾:https://www.youtube.com/watch?v=8WXgm4_V85E
基本上我說,因爲角色是你永遠能夠以同步的方式安全地使用異步特性。
哦!這是你的演講。激進。很好,讓你的用戶名面對。我一定會看這個。事情是,角色不是異步關係。它們被定義爲'DS.hasMany('role')',我正在使用'DS.EmbeddedRecordsMixin'來嵌入嵌入,這很好。當我'this.get('session.user.roles')',我沒有回到承諾,但我認爲是一個角色數組對象。 – ToddSmithSalter 2014-09-11 02:23:59
我可以確認,當我做'this.get('session.user.roles')'我得到一個DS.ManyArray對象作爲回報。我明白DS.ManyArray擴展了DS.RecordsArray,它擴展了Ember.ArrayProxy。我不應該有權訪問過濾器方法嗎?相反,我總是會收到錯誤'Uncaught TypeError:無法讀取未定義的屬性'過濾器'。 – ToddSmithSalter 2014-09-11 05:06:11
感謝您的鏈接。我確實設法用4層承諾來獲得和過濾角色。我現在遇到的問題是從方法返回承諾的布爾值。我試着把它設置在一個scoped變量上,但似乎並不堅持。 – ToddSmithSalter 2014-09-11 18:10:25