2015-08-31 1 views
1

Я пытаюсь следовать учебному пособию Backbone Rails, и я застреваю, пытаясь отобразить мою коллекцию ссылок в CompositeView, а не вложенность. Я подозреваю, что учебник сильно устарел, но поскольку у меня пока нет навыков магистральной работы, я не могу указать проблему. Пожалуйста, ознакомьтесь со следующим кодом:Поведение Marionette CompositeView

Создание коллекции навигационных ссылок.

@TestApp.module "Entities", (Entities, App, Backbone, Marionette, $, _) -> 

class Entities.Navigation extends Backbone.Model 

class Entities.NavigationCollection extends Backbone.Collection 
    model: Entities.Navigation 

API = 
    getLinks: -> 
     new Entities.NavigationCollection [ 
      { name: "one" } 
      { name: "two" } 
      { name: "three" } 
      { name: "four" } 
      { name: "five" } 
     ] 

App.reqres.setHandler "navigation:entities", -> 
    API.getLinks() 

Основной навигационный файл.

@TestApp.module "NavigationUnit", (NavigationUnit, App, Backbone, Marionette, $, _) -> 
@startWithParent = false 

API = 
    listNavigation: -> 
     NavigationUnit.List.Controller.listNavigation() 

NavigationUnit.on "start", -> 
    API.listNavigation() 

Контроллер, где я передаю коллекцию на вид.

@TestApp.module "NavigationUnit.List", (List, App, Backbone, Marionette, $, _) -> 

List.Controller = 

    listNavigation: -> 
     links = App.request "navigation:entities" 

     navigationView = @getNavigationView links 
     App.navRegion.show navigationView 

    getNavigationView: (links) -> 
     new List.Navigation 
      collection: links 

И вид.

@TestApp.module "NavigationUnit.List", (List, App, Backbone, Marionette, $, _) -> 

class List.NavigationLinks extends Marionette.ItemView 
    template: "navigation/list/templates/_links" 
    tagName: "li" 

class List.Navigation extends Marionette.CompositeView 
    template: "navigation/list/templates/list_navigation" 
    itemView: List.NavigationLinks 
    itemViewContainer: "ul" 

Содержание шаблона ItemView - %a{:href => "#"}= @name. И в CompositeView есть базовая структура обертки с тегом %ul. Теперь происходит то, что CompositeView отображает шаблон как ожидалось, но он не заполняет %ul с помощью элемента itemView. Вместо этого он создает количество дивов равно количество моделей в коллекции (пять в данном случае) и вставляет там целые шаблоны оболочки, так это выглядит следующим образом:

#navRegion 
    .div 
    .navigation-wrapper 
     .navigation-content 
     %ul 
    .div 
     .navigation-wrapper 
      // entire template 
    .div 
     .navigation-wrapper 
      // entire template 
//etc +3 divs 

Что я здесь делаю неправильно?

+0

В чем проблема? Ошибки брошены? Это не делает? – Creynders

+0

Проблема в том, что мой ItemView игнорируется, а вместо #navRegion заполняется копии шаблона CompositeView, как если бы они были моделями. Вот как это выглядит как http://i.imgur.com/dLWJEPp.png –

ответ

2

Ваш учебник, вероятно, устарел. Marionette переименовала свойство с itemView в childView в версии 2.0.0.

От the docs

Каждый childView будет оказываться с использованием шаблона в childView в. Создается шаблон CompositeView , и к нему добавляются шаблоны childView.

var ChildView = Marionette.ItemView.extend({}); 

var CompView = Marionette.CompositeView.extend({ 
    childView: ChildView 
}); 
+0

Благодарим вас за ответ, к сожалению, когда я меняю 'itemView' и' itemViewContainer' на 'childView' и' childViewContainer' соответственно, моя ошибка шаблона обработчик вызывает ошибку, которую мой «ItemView» больше не существует. Я не нашел ничего, связанного с другим шаблоном в документах, мне что-то не хватает? –

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

  • Нет связанных вопросов^_^