我正在开发的一个应用程序包括一个用户模型,并且用户有分数。我正在尝试创建一个“排行榜”页面,该页面将根据用户的分数对用户进行排名。我预计会有成千上万的人使用该应用程序,因此我希望通过三种方式查看排名:
- 仅列出前 100 名用户的前100名视图。
- A You视图列出了您上方的 10 个人,然后是您,然后是您下方的 10 个人。
- 显示您和您的朋友的朋友视图。
我不确定在 Ember 中解决此问题的“最佳”方法是什么。到目前为止,我的尝试似乎是在重复很多代码和/或把东西放在错误的地方。这是我的代码:
路线:
App.Router.map(function() {
this.resource('leaderboard', function() {
this.route('you', { path: '/' });
this.route('friends');
this.route('top');
});
});
App.LeaderboardYouRoute = Ember.Route.extend({
model: function() {
var users = App.store.find(App.User);
// TODO: sort users by descending score
// TODO: filter out users with an index too far from the user's
return users;
}
});
App.LeaderboardFriendsRoute = Ember.Route.extend({
model: function() {
var users = App.store.find(App.User);
// TODO: sort users by descending score and filter out non-friends
return users;
}
});
App.LeaderboardTopRoute = Ember.Route.extend({
model: function() {
var users = App.store.find(App.User);
// TODO: sort users by descending score and take the top 100
return users;
}
});
排行榜.车把:
<section id="leaderboard">
<nav>
<ul>
<li>{{#linkTo "leaderboard.you"}}You{{/linkTo}}</li>
<li>{{#linkTo "leaderboard.friends"}}Friends{{/linkTo}}</li>
<li>{{#linkTo "leaderboard.top"}}Top 100{{/linkTo}}</li>
</ul>
</nav>
{{ outlet }}
</section>
leaderboard_top.handlebars、leaderboard_you.handlebars、leaderboard_friends.handlebars:
{{#each user in model}}
<li data-user-id="">
<span class="score">{{ user.score }}</span>
<div class="photo"></div>
<span class="name">{{ user.name }}</span>
<div class="clearboth"></div>
</li>
{{/each}}
对我来说,拥有三个具有完全相同代码的不同模板似乎是多余的。类似地,我将不得不编写许多基本相同的代码,即“按降分对用户进行排序”。有一个更好的方法吗?