我正在开发的应用程序包括用户模型,并且用户有分数。我正在尝试创建一个“排行榜”页面,该页面将根据用户的得分对其进行排名。我预计会有成千上万的人使用该应用,因此我希望可以通过三种方式查看排名:

  • 前100个 View ,仅列出前100个用户。
  • 一个您的 View 列出了您上方的10个人,然后是您,然后列出了下方的10个人。
  • 一个 friend View ,显示您和您的 friend 。

  • 我不确定实现此目标的“最佳”方法是什么。到目前为止,我的尝试似乎是在重复很多代码和/或将错误内容放到错误的地方。这是我的代码:

    路线:
    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/

    10-10 18:20
    查看更多