2013-02-19 4 views
0

Приветствия! У меня есть два контроллера, и я хочу иметь доступ к takenSeatsNumbers от TravelClient.TourController.Свойства Ember.js проходят между контроллерами

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tour.seats'] 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 

Правильно ли я использую needs? И как получить takenSeatsNumbers от tour шаблон?

ответ

1

Как уже упоминалось выше, это current bug и так выше будет , казалось бы, работу , но не будет работать в действительности, как демонстрирует jsFiddle. Решение на данный момент должно пройти в случае контроллера через this.controllerFor на маршруте. Это далеко не идеальный, но пока этого достаточно.

Это происходит потому, что Эмбер относится к контроллерам с использованием dot.notation, в то время как при использовании верблюжьего или * under_scores *, то это создаст вам различные экземпляры.

Решение внедрить контроллер от вашего маршрута, например:

TravelClient.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
     var tourSeatsController = this.controllerFor('tour.seats'); 
     tourSeatsController.set('takenSeatsNumbers', [1,2,3]); 
     controller.set('tourSeatsController', tourSeatsController); 
    } 
}); 

И тогда вы можете использовать его на ваш взгляд, как: {{tourSeatsController.takenSeatsNumbers.length}}.

+0

очень полезный, спасибо, что для объяснения. – xamenrax

+0

Еще один фиктивный вопрос: как я могу установить 'takeSeatsNumbers' обратно в [], если модель в контексте' TourSeatsController' изменилась? – xamenrax

+0

У вас есть '.clear()'. – Wildhoney

0

Этот код основан на ember-pre4. Проксирование свойств от другого контроллера, кажется, шаблон таким образом, и, вероятно, могут быть обобщены с помощью Mixin:

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tourSeats'], 
    someMethod : function(){ 
    var tourSeatsController = this.get("controllers.tourSeats"); 
    // do something with it 
    }, 
    takenSeatsNumbers : function(){ //proxy the property 
    return this.get("controllers.tourSeats.takenSeatsNumbers") 
    }.property("controllers.tourSeats.takenSeatsNumbers") 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 
+0

Спасибо! Используя функции rc.1, я могу написать только 'needs: ['tourSeats']' , а затем в шаблоне 'tour':' {{controllers.tourSeats.takenSeatsNumbers}} ' – xamenrax

+1

Вам нужно быть осторожным, потому что' tourSeats 'будет другим экземпляром контроллера: http://jsfiddle.net/CzyWM/ Я разместил временное решение ниже, но ожидаю, что это будет исправлено для 1.0: https://github.com/emberjs/ember. js/issues/2025 – Wildhoney

+0

Это может быть проблема с точечной нотацией. Если вы не используете его, то он будет работать. Это рабочая скрипка, основанная на вашем: http://jsfiddle.net/mavilein/CzyWM/1/ – mavilein

Смежные вопросы