通过访问Ember.ArrayController获取话语中徽章的列表
Get list of badges in Discourse by accessing Ember.ArrayController from javascript outside of handlebars template
在Ember.js中,我知道我可以使用Ember.ArrayController
访问特定的数据集合,比如来自Ember网站的示例:
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?更具体地说,在话语中,为用户获取徽章。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应该如何工作或话语设计如何工作时遇到了问题。
我发现我以错误的方式处理这个问题,我应该使用一个promise来获得这样的用户徽章:
Discourse.UserBadge.findByUsername(Discourse.User.current().username).then(function(result) {
result.forEach(function(entry) {
console.log(entry.badge.name);
}
);
});
不过,现在我遇到了一个新问题,需要在加载视图之前加载此信息。promise是异步执行的,不会及时加载数据。
相关文章:
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 禁用jQuery中的下拉列表
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何在javascript中迭代数字列表
- 如何在按钮中显示下拉列表中选定的元素
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 使用图像数组列表的simplegallary.js显示适合桌面屏幕的图像
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 通过访问Ember.ArrayController获取话语中徽章的列表