тлеющий уголек.Яш + руль: оказываем против против против против частичного выхода вид контроля


есть разбросанные объяснения каждого вокруг, но я все еще не на 100% ясно о различиях и использовании. Может ли кто-нибудь дать мне параллельное сравнение?

{{outlet}}
{{outlet NAME}}
{{render}}
{{partial}}
{{view}}
{{control}}

Примечание: этот пост был очень полезен с частичной vs render

4 51

4 ответа:

все они являются помощниками шаблонов со следующими основными характеристиками, как описано в руководствах emberjs. (http://emberjs.com/guides/templates/rendering-with-helpers/)

1.{{outlet}} - отображает шаблон на основе маршрута, определенного маршрутизатором. На основе маршрута используются соответствующие контроллер и вид. это полезно при визуализации содержимого на основе маршрута, который является наиболее распространенным случаем.

2.{{outlet NAME}} - Предоставляет возможность указать в маршруте, где именно будет отображаться контент. полезно при попытке отобразить содержимое из нескольких шаблонов для маршрута.

3.{{render}} - аналогично outlet но контроллер / вид / модель могут быть указаны прямо или косвенно от помощника. Полезно, когда требуется отображать содержимое из нескольких шаблонов с возможностью переопределения контекста (представления/контроллера) и модели. Если модель указана, она использует уникальный экземпляр соответствующего контроллера, в противном случае он будет использовать одноэлементный экземпляр. полезно, когда требуется, чтобы переопределить контекст и модель маршрута, при рендеринге содержимого нескольких шаблонов.

4.{{control}} - работает как рендер, за исключением того, что он использует новый экземпляр контроллера для каждого вызова, вместо повторного использования одноэлементного контроллера. При использовании render невозможно использовать несколько рендеров для одного и того же маршрута без указания модели, в этом случае control должен быть использован. полезно для поддержки новых экземпляров контроллера для каждого отображаемого содержимого шаблона.

обновление: помощник управления был удален https://github.com/emberjs/ember.js/commit/86eecd7ef7cdc7d2ea6f77b3a726b293292ec55d .

5.{{partial}} - принимает шаблон, который будет отображаться в качестве аргумента, и отображает этот шаблон на месте. Он не изменяет контекст или область действия. Он просто отбрасывает данное шаблон на место с текущей областью действия. Таким образом, класс представления не указан для частичного. полезно, когда требуется разбить шаблон на модули шаблонов, для лучшего управления или повторного использования, без создания каких-либо классов представления.

6.{{view}} - это работает как частичный, но класс представления предоставляется. Класс смотреть шаблон для использования. полезно при разбиении шаблона на модули, но требуется класс представления, например, для события обращение.

7.{{#view}} - существует также блочная форма помощника представления, которая позволяет указать шаблон дочернего представления, встроенный в шаблон родительского представления. (http://emberjs.com/guides/views/inserting-views-in-templates/)

{{outlet}} это определяет, где вложенные ресурсы/маршруты будут отображаться в маршруте шаблон

{{outlet NAME}} это создает именованный выход, где вы можете программно отобразить что-то в

App.PostRoute = App.Route.extend({
  renderTemplate: function() {
    this.render('favoritePost', {   // the template to render
      into: 'posts',                // the route to render into
      outlet: 'posts',              // the name of the outlet in the route's template
      controller: 'blogPost'        // the controller to use for the template
    });
    this.render('comments', {
      into: 'favoritePost',
      outlet: 'comment',    
      controller: 'blogPost'
    });
  }
});

{{render}} принимает два параметра:

первый параметр описывает контекст для установки Необязательным вторым параметром является модель, которая будет передана контроллеру при условии

{{render}} выполняет несколько вещи:

когда модель не предоставляется он получает одноэлементный экземпляр соответствующего контроллера Когда модель получает уникальный экземпляр соответствующего контроллера Отображает именованный шаблон с помощью этого контроллера Устанавливает модель соответствующего контроллера

{{partial}} принимает шаблон для отображения в качестве аргумента и отображает этот шаблон на месте (используя текущую область в качестве контекста).

{{view}} этот помощник работает как частичный помощник, за исключением того, что вместо шаблона, который будет отображаться в текущем шаблоне, вы предоставляете класс представления. Представление управляет отображением шаблона.

{{control}} и устаревший работает как рендер, за исключением того, что он использует новый экземпляр контроллера для каждого вызова, вместо повторного использования одноэлементного контроллера.

большую часть этого я просто скопировал и вставил из своей документации: http://emberjs.com/guides/templates/rendering-with-helpers/

  1. render помощник устарел в v2.x вместо этого вам нужно использовать Эмбер-в другом месте аддон. https://emberjs.com/deprecations/v2.x/#toc_rendering-into-a-render-helper-that-resolves-to-an-outlet
  2. ember.view является устаревшим в v1.х вместо того, чтобы использовать компонент. см. https://emberjs.com/deprecations/v1.x/#toc_ember-view
  3. control помощник только экспериментальный, его уже удалено

я бы сказал в настоящее время только {{outlet}} рекомендуется один оставшийся все либо устарели / удалены.

основные различия

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

{{partial}} отображает шаблон, доступный в Ember.ШАБЛОНЫ. возможно, он не связан с классом представления. Преимущество заключается в том, что контекст шаблона остается родительским представлением.

{{outlet}} укажите маршрутизатор, который здесь должен отображать предоставленное представление или шаблон или в соответствии с крючком renderTemplate ().

{{outlet NAME}} полезное если вы хотите отобразить два вида / шаблона в разных положениях. Вы можете назвать розетки и попросить маршрутизатор выполнить рендеринг.

{{render}} то же, что и розетка, за исключением того, что вы заставляете маршрутизатор отображать определенный вид/шаблон.