通过从车把模板外部的 javascript 访问 Ember.ArrayController 获取 Discourse 中的徽章列表
Get list of badges in Discourse by accessing Ember.ArrayController from javascript outside of handlebars template
在 Ember.js 我知道我可以使用 Ember.ArrayController
访问特定的数据集合,like the example from the ember website:
MyApp.listController = Ember.ArrayController.create();
$.get('people.json', function(data) {
MyApp.listController.set('model', data);
});
并像这样在把手中访问它:
{{#each person in MyApp.listController}}
{{person.firstName}} {{person.lastName}}
{{/each}}
不过,我想做的是访问 javascript 中的 this?更具体地说,在 Discourse 中,为用户获取徽章。 user-badges.js.es6
控制器:
export default Ember.ArrayController.extend({
sortProperties: ['badge.badge_type.sort_order', 'badge.name'],
orderBy: function(ub1, ub2){
var sr1 = ub1.get('badge.badge_type.sort_order');
var sr2 = ub2.get('badge.badge_type.sort_order');
if(sr1 > sr2) {
return -1;
}
if(sr2 > sr1) {
return 1;
}
return ub1.get('badge.name') < ub2.get('badge.name') ? -1 : 1;
}
});
如何获取用户的徽章列表?调用 Discourse.UsersBadges ArrayController 似乎不起作用。
import UserBadges from 'discourse/controllers/user-badges';
for(var badge in UserBadges){
console.log(badge);
}
我不确定我是否 运行 无法理解 EmberJS 的工作原理或 Discourse 的工作原理。
我发现我以错误的方式解决问题,我应该使用这样的承诺来获得用户徽章:
Discourse.UserBadge.findByUsername(Discourse.User.current().username).then(function(result) {
result.forEach(function(entry) {
console.log(entry.badge.name);
}
);
});
不过,现在我遇到了一个新问题,我需要在加载视图之前加载此信息。 promise 异步执行,不会及时加载数据。
在 Ember.js 我知道我可以使用 Ember.ArrayController
访问特定的数据集合,like the example from the ember website:
MyApp.listController = Ember.ArrayController.create();
$.get('people.json', function(data) {
MyApp.listController.set('model', data);
});
并像这样在把手中访问它:
{{#each person in MyApp.listController}}
{{person.firstName}} {{person.lastName}}
{{/each}}
不过,我想做的是访问 javascript 中的 this?更具体地说,在 Discourse 中,为用户获取徽章。 user-badges.js.es6
控制器:
export default Ember.ArrayController.extend({
sortProperties: ['badge.badge_type.sort_order', 'badge.name'],
orderBy: function(ub1, ub2){
var sr1 = ub1.get('badge.badge_type.sort_order');
var sr2 = ub2.get('badge.badge_type.sort_order');
if(sr1 > sr2) {
return -1;
}
if(sr2 > sr1) {
return 1;
}
return ub1.get('badge.name') < ub2.get('badge.name') ? -1 : 1;
}
});
如何获取用户的徽章列表?调用 Discourse.UsersBadges ArrayController 似乎不起作用。
import UserBadges from 'discourse/controllers/user-badges';
for(var badge in UserBadges){
console.log(badge);
}
我不确定我是否 运行 无法理解 EmberJS 的工作原理或 Discourse 的工作原理。
我发现我以错误的方式解决问题,我应该使用这样的承诺来获得用户徽章:
Discourse.UserBadge.findByUsername(Discourse.User.current().username).then(function(result) {
result.forEach(function(entry) {
console.log(entry.badge.name);
}
);
});
不过,现在我遇到了一个新问题,我需要在加载视图之前加载此信息。 promise 异步执行,不会及时加载数据。