我正在开发的应用程序包括用户模型,并且用户有分数。我正在尝试创建一个“排行榜”页面,该页面将根据用户的得分对其进行排名。我预计会有成千上万的人使用该应用,因此我希望可以通过三种方式查看排名:
我不确定实现此目标的“最佳”方法是什么。到目前为止,我的尝试似乎是在重复很多代码和/或将错误内容放到错误的地方。这是我的代码:
路线:
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;
}
});
Leaderboard.handlebars:
<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}}
对于我来说,拥有三个完全相同的代码的不同模板似乎是多余的。同样,我将不得不编写许多基本相同的代码,即“按降序对用户排序”。有一个更好的方法吗?
最佳答案
您可以轻松地将同一模板用于不同的 Controller / View 。可以在 View 中定义使用哪个模板。例:
ExampleView = Ember.View.extend({
templateName : "theSameTemplateAgainAndAgain"
});
ph值
更新
正如该答案的前两个注释所指出的,如果根本不使用 View ,则该解决方案可能仍会得到改进。定义要直接在路线上呈现的模板,如下所示。
App.ExampleRoute = Ember.Route.extend({
renderTemplate: function() {
this.render('theSameTemplateAgainAndAgain');
}
});
关于ember.js - Ember中已排序表的路由和 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14861405/