2013-05-25 32 views
1

我想知道如何在路由器中創建一個模型,其中的屬性取自控制器的「needs」功能所提供的依賴項。我使用的是ember-1.0.0-rc.3。使用「needs」創建需要對象作爲屬性的router路由器

這裏是我的應用程序是如何現在看起來,有點簡單:

App.LeagueAddMatchRoute = Ember.Route.extend({ 
    model: function (params) { 
     var match = App.Match.createRecord({}); 
     return match; 
    }, 
    setupController: function (controller) { 
     controller.set('players', App.Player.find()); 
    } 

}); 

App.LeagueAddMatchController = Ember.ObjectController.extend({ 
    needs: "league", 
    save: function() { 
     this.get('model').get('transaction').commit(); 
     return this.transitionToRoute('leagues'); 
    } 
}); 

App.Router.map(function() { 
    this.resource('leagues', function() { 
     this.resource('league', { path: ':league_id' }, function() { 
      this.route('addMatch'); 
     }) 
    }); 
}); 

App.LeaguesRoute = Ember.Route.extend({ 
    model: function() { 
     return App.League.find(); 
    } 
}); 

App.League = DS.Model.extend({ 
    name: DS.attr('string'), 
    matches: DS.hasMany('App.Match') 
}); 

App.Match = DS.Model.extend({ 
    league: DS.belongsTo('App.League'), 
    p1: DS.belongsTo('App.Player', {inverse: 'p1matches'}), 
    p2: DS.belongsTo('App.Player', {inverse: 'p2matches'}), 
    p1Score: DS.attr('number'), 
    p2Score: DS.attr('number') 
}); 

這是我想做到:

App.LeagueAddMatchRoute = Ember.Route.extend({ 
    model: function (params) { 
     var match = App.Match.createRecord({league: controller.league }); 
     return match; 
    }, 
    setupController: function (controller) { 
     controller.set('players', App.Player.find()); 
    } 

}); 

回答

1

從路中,你可以使用訪問不同的控制器:

this.controllerFor("theControllerIWant"); 

所以你可以做:

App.LeagueAddMatchRoute = Ember.Route.extend({ 
    model: function (params) { 
    var match = App.Match.createRecord(); 
    match.set('league', this.controllerFor("league")); 
    return match; 
    }, 
    setupController: function (controller) { 
    controller.set('players', App.Player.find()); 
    } 
}); 

希望它能幫助

+0

我嘗試了這樣的: VAR匹配= App.Match.createRecord({聯盟:this.controllerFor( 「聯盟」)}); 但是當我嘗試打開路由時出現錯誤,說: 屬性必須是數字,字符串或布爾值,而不是 andersem

+0

編輯我的答案,你可以再試一次嗎? – intuitivepixel

+0

謝謝,但仍無法正常工作,它說: 只能添加App.League的記錄這種關係 當我嘗試將其更改爲: match.set(「聯盟」,this.controllerFor(」 。聯盟「)獲得( '模型')); 我再次得到這個錯誤: 未捕獲的錯誤:斷言失敗:屬性必須是數字,字符串或布爾值,而不是 andersem

相關問題