0

次のルーターがあります。

Whistlr.OrganizationsNewRoute = Ember.Route.extend
  model: ->
    Whistlr.Organization.createRecord()
  setupController: (controller, model) ->
    @controllerFor('organization').set('content', model)

これは、次のようなバインディングを持ついくつかの入力を持つ新しい組織フォームで呼び出されます。

Em.TextField valueBinding="name"

これらの入力のいずれかにデータを入力すると、次のエラー メッセージが表示されます。

Cannot delegate set('name', C) to the 'content' property of object proxy <Whistlr.OrganizationsNewController:ember519>: its 'content' is undefined.

これは、コントローラーがルーターによって適切に設定されていないことを示しています。なぜそれが起こっているのですか?

4

2 に答える 2

1

その理由は、モデルを に設定しているためですWhistlr.OrganizationsController。ここで、controllerfor は、 ofをオーバーライドしたため、コンテンツが設定されWhistlr.OrganizationsNewRouteませWhistlr.OrganizationsNewControllerん。setupControllerWhistlr.OrganizationsNewRoute

Whistlr.OrganizationsNewRouteWhistlr.OrganizationsControllerデフォルトのコントローラーにしたい場合は、次のようにします。

Whistlr.OrganizationsNewRoute = Ember.Route.extend({
        controllerName: 'organization'
});

これにより、Whistlr.OrganizationsControllerが のデフォルト コントローラとして設定されます。これにより、 もWhistlr.OrganizationsControllerオーバーライドする必要がない場合がありますsetupController。ただし、これはマスターでのみ使用できます。

RC ビルド <= 1.0.0.RC6 を使用している場合は、renderTemplateof でコントローラーを指定する必要がありWhistlr.OrganizationsNewRouteます。

    Whistlr.OrganizationsNewRoute = Ember.Route.extend({
           setupController: function(controller,model) {
                 this.controllerFor('organization').set('content', model)
           },
           renderTemplate: function(){
                  this.render({ controller: 'organization' });
           }
    });
于 2013-07-31T06:52:01.513 に答える