2

到目前为止我所拥有的:

App = Ember.Application.create({
    LOG_TRANSITIONS: true
});


App.Router.map(function(match){
    match('/').to('application');
    match('/edit').to('edit');
});


App.ApplicationRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('edit');
    },
    events: {
        startEdit: function( context ){
            this.transitionTo( 'edit' );
        }
    }
})

App.EditRoute = Ember.Route.extend({
    init: function(){
        this._super()
        console.log('EditRoute')
    },
});

车把:

<script type="text/x-handlebars" data-template-name = 'application'>
    Hello World
    {{ outlet main }} 
</script>

<script type="text/x-handlebars" data-template-name = 'edit'>
    <div class = 'edit-background'> Edit State: {{ title }} </div>
</script>

我有四个问题:

  1. 当我打开应用程序时,它只保留在主页中,redirectTo 挂钩是否会立即将您重定向到另一个状态?

  2. 此外,我AplicationRoute根据此处的建议将这些事件散列在:How to programmatically transition between routes using Ember.js' new Router。但是我通读了答案,但仍然不确定您应该如何使用它。

  3. 如何在控制台上测试路由器?在您可以通过调用命令在状态之间导航之前transitionTo,我现在该怎么办?

  4. 出于某种奇怪的原因,我的应用程序模板似乎被渲染了两次,因为那里有两个“Hello World”,当尝试添加如下内容时:<li>{{#linkTo edit}}edit{{/linkTo}}</li>

我收到此错误:

'Uncaught TypeError: Cannot read property 'container' of undefined   --  ember.js:2223' 
4

1 回答 1

2

这是您在应用程序启动时最初加载 editView/route/template 的方式:

路由器

App.Router.map(function(match){
  match('/').to('application',function(match){
    match('/').to('edit')
  })
})

应用程序模板

<script type="text/x-handlebars" data-template-name="application">
    {{outlet}}
</script>

编辑模板

<script type="text/x-handlebars" data-template-name="edit">
    I am embedded! 
</script>

编辑路线

EditRoute = Ember.Route.extend({
  renderTemplates:function () {
      this.render('edit', {
      into:'application'
   });
})
于 2013-01-09T14:50:08.230 回答