2013-07-27 4 views
1

У меня проблема с индексированием массива. Глядя вокруг, я нашел несколько примеров того, как к элементам индекса в контроллере через представление http://jsfiddle.net/WSwna/14/Ember.js, как создать массив, который я могу индексировать

Моего приложение получает данные из REST вызова следующего

Videos.Store = DS.Store.extend({ 
revision: 12, 
url: "http://localhost/", 
adapter: Videos.Adapter 
}) 

Моего маршрутизатора следующего

Videos.Router.map(function(){ 
this.resource('videos', {path: '/'}); 
this.route('forms'); 
}) 

Videos.VideosRoute = Ember.Route.extend({ 
    model: function(){ 
     return Videos.Video.find(); 
    } 
}); 

И когда я реализовать HTML как

{{#each controller}} 
..... 
{{/each}} 

Отображаются мои данные.

Однако я хочу, чтобы реализовать пример из ссылки http://jsfiddle.net/WSwna/14/ Но у меня есть проблемы с генерируя Videos.VideosController и мимоходом, что в {{#each итератора}}

Мой Videos.VideosController выглядит следующим образом

Videos.VideosController = Ember.ArrayController.extend({ 
    model: function(){ 
     return Videos.Video.find(); 
    } 
}); 


Videos.VideoView = Ember.View.extend({ 
    content: null, 
    adjustedIndex: function(){ 
     return this.getPath('_parentView.contentIndex') + 1; 
    }.property() 
}); 

Но когда я использую это в HTML следующим образом:

{{#each Videos.VideosController }} 

Я получаю сообщение об ошибке говоря, что контент должен внедрять Ember.Array. Вы передали видео. VideosController. Насколько я понимаю, Ember предоставил массив массивов по умолчанию, который нужно повторить, но теперь, когда я хочу расширить этот контроллер, мне трудно создать массив данных для передачи в представление. Я также не понимаю, как код View подключается к этому расширенному контроллеру.

Любые идеи, которые могут помочь прояснить это, будут очень признательны.

ответ

2

Однако я хочу, чтобы реализовать пример из ссылки http://jsfiddle.net/WSwna/14/ Но у меня есть проблемы с генерируя Videos.VideosController и мимоходом, что в {{#each итератора}}

Altough это не но для достижения того, что вы пытаетесь сделать с вашим VideosController, вы должны создать экземпляр, а не расширяться. Это будет выглядеть примерно так:

Videos.videosController = Ember.ArrayController.create({ 
    content: [{ name: 'Goodfellas' }, { name: 'The Aviator' }, { name: 'The Departed' }] 
}); 

, то вы можете использовать его, как это перебрать:

{{#each Videos.videosController}} 
    ... 
{{/each}} 

Две вещи, чтобы отметить здесь, что мы не расширяя ArrayController, но вместо того, чтобы создавать непосредственно экземпляр из этого, и мы также используем строчный регистр videosController, чтобы указать, что это экземпляр.

Еще одна вещь, которую стоит упомянуть, заключается в том, что у controller нет крючка model, как у route.

Надеюсь, это поможет.

EDIT

После последнего комментария я понял, что вы действительно хотели сделать, так что я собрал небольшую jsbin, показывающий, как можно использовать данные из вашей модели кормить содержание ваших Videos.videosController «S , посмотрите here.

Но в основном то, что вы должны сделать, это подключить в afterModel крючок вашего route и передать уже найденную модель для содержания ваших Videos.videosController «ы:

Videos.videosController = Ember.ArrayController.create({ 
    content: [] 
}); 

Videos.VideosRoute = Ember.Route.extend({ 
    model: function(){ 
    return Videos.Video.find(); 
    }, 
    afterModel: function(model) { 
    Videos.videoController.set('content', model); 
    } 
}); 
+0

Это большая помощь. Но я все еще застрял. Одна из вещей, с которыми я действительно борюсь, заключается в том, что когда маршрут создает массив из модели, как я могу его использовать? Итак, в приведенном выше примере вы имеете hardcoded контент: [{name: 'Goodfellas'}, {name: 'foobar'}], но я хочу иметь возможность делать что-то вроде Video.Video.find(). –

+0

@ LindaKeating, я отредактировал свой ответ, я думаю, теперь он отражает больше вашего прецедента, надеюсь, что это поможет. – intuitivepixel

+0

Привет Большое спасибо. Это начинает иметь для меня немного больше смысла. Я все еще застрял. Я искал API для документации о 'afterModel' и не могу найти. Кроме того, код работает для меня без ошибок, но я не думаю, что массив в videoController заполняется данными. Когда я отлаживаю его где-то вдоль строки, я получаю сообщение об ошибке «Ожидаемый хеш» или «Миксин», получил [object Object] ember. Может, придется сдаться! но еще раз спасибо –