2

我有一个匹配列表,当我单击一个时,我想显示匹配。我知道我可以做一个 Master-Detail 样式的页面,当我单击一个时,我可以在同一页面的某处看到插座,但这不是我想要的。

我想要它,以便当我点击一个链接时,它会转到一个全新的匹配页面。我真的不知道该怎么做。

这是我的路线#/matches(在咖啡脚本中)

App.MatchesRoute = Ember.Route.extend(
  model: ->
    App.Match.find()
)

这是我的matches.handlebars

<div id="matches">
  {{#each match in controller}}
    {{#linkTo "match" match class="panel six columns"}}
      Match between {{match.player.name}} and {{match.opponent.name}}
    {{/linkTo}}
    <br />
  {{/each}}
</div>

// I know that if I have this outlet, it will render `match.handlebars`
// right here, but I want it to be it's own page.
// {{outlet}}

我只使用 Ember 几天,我发现的所有示例都使用主从视图。

请让我知道我可以从我的代码中提供的任何其他信息。

4

2 回答 2

2

<编辑日期="2013 年 3 月 11 日">

我已经在 GitHub 中推送了这个存储库。这是一个概念应用程序,它使用renderTemplate了您所描述的方式。

</编辑>

在您的子路由中,使用renderTemplate钩子来告诉您的应用程序在特定的{{outlet}}. 例子:

源小提琴

App.Router.map(function() {
    this.resource('matches', { path: 'matches' }, function() {
        this.route('match', { path: 'match/:match_id' });
    });
});

App.MatchesRoute = Em.Route.extend({
    model: function() {
        return App.Match.find();
    },
    setupController: function(controller, model) {
        model = App.Match.find();
        controller.set('content', model);
    },
    renderTemplate: function() {
        this.render('matches', {
            into: 'application'
        })
    }
});

App.MatchesMatchRoute = Em.Route.extend({
    model: function(params) {
        return App.Match.find(params.match_id);
    },
    setupController: function(controller, model) {
        controller.set('content', model);
    },
    renderTemplate: function() {
        this.render('match', {
            into: 'application'
        })
    }
});

这是设置为将其模板 ( )MatchesMatchRoute呈现到模板中。而且由于这个模板只有一个(见下面的把手),我们不必指定任何东西:matches/matchapplication{{outelet}}

<script type="text/x-handlebars">
    <h1>App</h1>
    {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="matches">
    <h2>Matches</h2>
    <ul>
    {{#each match in controller}}
        <li>
            {{#linkTo matches.match match}}
                {{match.title}}
            {{/linkTo}}
        </li>
    {{/each}}
    </ul>
</script>

<script type="text/x-handlebars" data-template-name="match">
    <h3>{{title}}</h3>
    <p>{{description}}</p>
</script>

如果您有多个插座的场景,则必须对它们进行限制,如下面的车把:

<script type="text/x-handlebars">
    <h1>App</h1>
    {{outlet main}}<br />
    {{outlet nested}}
</script>

然后你的路线也必须指定出口。例子:

源小提琴

[...route code...]
renderTemplate: function() {

    this.render('content', {
        into: 'application',
        outlet: 'main'
    });

    this.render('buttons', {
        into: 'application',
        outlet: 'nested'
    });

}
[...route code...]
于 2013-03-11T03:42:04.453 回答
1

renderTemplate您可以在定义路由时使用钩子使模板呈现到不同模板的出口(请参阅指南: http ://emberjs.com/guides/routing/rendering-a-template/ )

对于您的示例,它可能如下所示:

App.MatchRoute = Ember.Route.extend({
  renderTemplate: function() {
    this.render({ into: 'matches' });
  }
});
于 2013-03-11T03:06:27.697 回答