过渡到新的记录

时间:2013-04-23 18:11:05

标签: ember.js

我正在尝试转换到新创建的记录。我可以创建它,填写并保存在服务器上,但是当涉及到this.transitionToRoute( 'app', this.get( 'content' ) );时,我收到一个控制台错误:

  

未捕获错误:断言失败:您正在尝试查找   您没有定义的控制器,而Ember不知道   模特。

这不是路由的控制器,因此您必须显式定义控制器(WEM.AppsCreateAppController)或将模型作为第二个参数传递给controllerFor,以便Ember知道要为其创建哪种类型的控制器you.`

我明白错误告诉我的是什么,只是不确定我哪里出错了。这是(我认为)相关代码:

WEM.CreateAppController = Ember.ObjectController.extend({
  startEditing: function() {
        console.log( 'start' );
        this.transaction = this.get( 'store' ).transaction();
        this.set( 'content', this.transaction.createRecord( WEM.App, {} ) );
    },

    stopEditing: function() {
        console.log( 'stop' );
        if ( this.transaction ) {
            this.transaction.rollback();
            this.transaction = null;
        }
    },

    save: function() {
        console.log( 'save' );
        this.transaction.commit();
        this.transaction = null;
    },

    transitionAfterSave: function() {
        console.log( 'trans' );
        if ( this.get('content.id' ) ) {
            console.log(this.get( 'content' ));
            this.transitionToRoute( 'app', this.get( 'content' ) );
        }
    }.observes( 'content.id' ),

    cancel: function() {
        console.log( 'cancel' );
        this.stopEditing();
        this.transitionToRoute( 'apps' );
    }
});

这是我的路线

WEM.Router.map(function(){
    this.resource( 'apps', { path: '/' }, function(){
        this.resource( 'create_app', { path: 'apps/new' } );
        this.resource( 'app', { path: 'app/:app_id'}, function(){
            this.resource( 'settings', { path: 'settings' } );
            this.resource( 'error', { path: 'error/:error_id' } );
        });
    });
});

1 个答案:

答案 0 :(得分:1)

听起来app路线有问题。您是否能够使用现有记录过渡到它?例如,更改

transitionAfterSave: function() {
    console.log( 'trans' );
    if ( this.get('content.id' ) ) {
        console.log(this.get( 'content' ));
        this.transitionToRoute( 'app', WEM.App.find(1) );
    }
}.observes( 'content.id' ),

假设你有一个id = 1的应用程序并且你有一个app/:app_id路由,那么这应该可行。如果没有,您可以调试应用程序路径的问题而不必担心新记录。