2014-01-08 3 views
2

Работаю над моим приложением Ember здесь, и все идет хорошо. Тем не менее, я столкнулся с проблемой непредвиденного поведения, и я не уверен в лучшем подходе к этой проблеме.Ember renderTemplate relay model

Проблема в том, что в определенном маршруте я хочу отобразить другой маршрут в другой выход. Однако другой маршрут, который я делаю в другой розетке, не сохраняет свою собственную модель.

Если я это сделать:

App.TestRoute = Ember.Route.extend({ 
    model: function() { 
     return { 
      heading: "Test", 
      testContent: "This is test." 
     } 
    } 
}); 

App.IndexRoute = Ember.Route.extend({ 
    renderTemplate: function() { 
     this.render("test", { 
      outlet: "left" 
     }); 

     this.render({ 
      outlet: "right" 
     }); 
    }, 

    model: function() { 
     return { 
      heading: "Index", 
      indexContent: "This is index." 
     } 
    } 
}); 

... и доступом к IndexRoute, я ожидал бы TestRoute «модель s быть воспроизводимой в TestRoute» s шаблон, но модель только IndexRoute «s является передается на оба шаблона.

Fiddle здесь: http://jsfiddle.net/3TtGD/1/

Как разрешить Ember использовать модель по умолчанию для маршрута без экспрессивно их объединить? Это кажется утомительным.

Кроме того, желательно иметь одинаковое название некоторых свойств модели, например {{heading}}, но не обязательно.

Каков наилучший способ решения этой проблемы?

Спасибо за ваше время.

С наилучшими пожеланиями, dimhoLt

+0

Я просто посмотрел на это и что Ember рекомендует вам установить другой контроллер для шаблона, который нуждается в другой модели, см .: [link] http://emberjs.com/guides/routing/rendering-a -template/Обычно я использую магазин, откуда вы можете обращаться к записям и к контроллеру с помощью 'setupController' – baerli

+0

Это решило мою проблему. Благодаря! –

ответ

4

В renderTemplate методе вы рассказываете Ember, чтобы сделать шаблон внутри розетки, но это будет только по умолчанию контроллера к одному управляющему маршрутом. Учитывая, что контроллер управляет маршрутом, имеет смысл, что он управляет всеми шаблонами в этом маршруте.

Конечно, вы можете указать другой контроллер с помощью:

this.render("test", { 
    outlet: "left", 
    controller: 'test' 
}); 

это в свою очередь может быть контроллер вы уже инстанцированный (и, возможно, установить его content):

var testController = this.controllerFor('test'); 
testController.set(....) 
this.render("test", { 
    outlet: "left", 
    controller: testController 
}); 

Об использовании модели : Вы можете позвонить this.modelFor('test') внутри маршрута, и он вернет модель маршрута test (он даже знает, если он уже был разрешен). Обычно я это делаю, когда мне нужно получить доступ к модели одного из родительских маршрутов.

Я считаю, что имеет смысл получить доступ к модели родительского маршрута, но не так много, если вы обращаетесь к модели несвязанного маршрута. Почему вы не хотите merge обе модели?

+0

Спасибо за ваш ответ, edpaez. Мой сайт очень модульный, и в настоящее время у меня есть определенный маршрут для каждого модуля, который, в свою очередь, может быть отображен (в настоящее время) в одном из двух разных торговых точек. Это всего лишь конкретная комбинация различных модулей.Правильно ли использовать маршруты здесь, или если маршрут в основном должен быть просто путём и моделями и т. Д., В свою очередь, должен быть сгенерирован в то время или что-то еще, я не знаю, и советы по лучшим практикам всегда оценили! –

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