2014-02-05 200 views
0

我的應用中的用戶有配置文件頁面。用戶可以查看自己的配置文件和其他用戶的配置文件。在他自己的檔案中,他能夠改變他的頭像,但他當然不能改變另一個用戶的頭像。頭像上傳的腳本按需加載,使用簡介路由的beforeModel鉤子。問題是僅當用戶訪問他自己的配置文件時才加載此腳本,而不是其他用戶的配置文件。Ember.js:訪問父路由的控制器

這裏是我的代碼:

路由器:

Router.map(function() { 

    this.resource('user', { path: '/:user_id' }, function() { 
     this.resource('profile'); 
    }); 

}); 

申請途徑:

var ApplicationRoute = Em.Route.extend({ 

    model: function() { 
     return { 
      currentUser: this.config.currentUser 
     }; 
    } 

}); 

用戶路線:

var UserRoute = Em.Route.extend({ 

    model: function (params) { 
     var currentUser = this.modelFor('application').get('currentUser'); 

     if (currentUser.get('id') === params.user_id) { 
      return currentUser; 
     } else { 
      // getUser returns promise 
      return this.data.getUser(params.user_id); 
     } 
    } 

}); 

用戶控制器:

var UserController = Em.ObjectController.extend({ 

    needs: 'application', 

    isCurrent: function() { 
     return (this.get('id') === this.get('controllers.application.currentUser.id')); 
    }.property('id') 

}); 

檔案路線:

var uploaderScriptInjected = false; 

var ProfileRoute = Em.Route.extend({ 

    beforeModel: function() { 
     if (!uploaderScriptInjected && this.uploaderNeeded()) { 
      return $.getScript(this.config.assets.uploader) 
       .then(function() { 
        uploaderScriptInjected = true; 
       }); 
     } 
    }, 

    uploaderNeeded: function() { 
     // This is not working: 

     // return this.controllerFor('user').get('isCurrent'); 
    }, 

    model: function() { 
     var user = this.modelFor('user'); 

     return Em.RSVP.hash({ 
      photos: this.data.photosByUser(user.get('id')) 
     }); 
    } 

}); 

在配置文件路徑的beforeModeluploaderNeeded方法看看。我想使用用戶控制器的isCurrent屬性,但用戶路由的setupController方法在uploaderNeeded之後調用,這意味着用戶控制器的實例尚未生成,並且尚未設置用戶控制器的模型。當然,我可以使用此代碼:

uploaderNeeded: function() { 
    return this.modelFor('application').get('currentUser.id') === this.modelFor('user').get('id'); 
} 

...但它重複用戶控制器isCurrent財產邏輯。

有什麼辦法從配置文件路由的方法訪問用戶控制器的屬性?

回答

0

嘗試例如 App.FirstController = Ember.ArrayController.extend({}) 擴展父控制器,然後 App.SecondController = Ember.FirstController.extend({})

+1

也許我失去了一些東西,但它如何能幫助我嗎? – th0r

+0

你可以使配置文件控制器擴展UserController ..這必須工作,但我不知道 – Stakoov