2015-02-24 2 views
0

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

My (сокращенно) маршрутизации выглядит более или менее, как это:

Router.map(function() { 
    this.resource('shops', { path: '/' }, function() { 
    this.resource('shop', { path: ':shop_id' }, function() { 
     this.resource('items', { path: 'admin'}, function() { 
     }); 
    }); 
    }); 
}); 

Намерение состоит в том, что пользователь будет выбрать магазин, а затем получить список всех возможных пунктов с флажками, где он может решить, какие доступны в этом магазине, а какие нет. До сих пор я просто пытаюсь отобразить список всех элементов, но он не работает. Однако список магазинов - никаких проблем.

  • URL: /

    работ. model - все магазины.

  • URL: /1

    работ. model является магазин с ID 1.

  • URL: items.index Assertion Failed:: /1/admin

    Ошибка при обработке маршрута ArrayProxy ожидает массив или Ember.ArrayProxy, но вы прошли объект

Оба shops и items контроллеры идентичны:

// app/controllers/shops.js 
// app/controllers/items.js 
export default Ember.ArrayController.extend({}); 

Трассы почти идентичны:

// app/routes/shops/index.js 
export default Ember.Route.extend({ 
    model: function() { 
    return this.store.find('shop'); 
    } 
}); 

// app/routes/items/index.js 
export default Ember.Route.extend({ 
    model: function() { 
    return this.store.find('item'); 
    } 
}); 

Контроллер shop не существует, а shop.index маршрут тривиальна:

// app/routes/shop/index.js 
export default Ember.Route.extend({}); 

Что это дает?

EDIT:JSBin

+0

Есть ли какая-либо причина, чтобы сохранить элементы в качестве ресурса вместо маршрута – Vaibhav

+0

@Vaibhav: Может быть, нет. Как я уже сказал, новичок. Но поскольку у меня есть элементы в качестве модели, имеет смысл сделать это ресурсом. Если бы я отправился в маршрут (shop.admin), как бы получить список предметов? Нужно ли мне «нужны» элементы «' в контроллере 'shop'? – Amadan

+0

Я думаю, что в этом случае, как мне кажется, в этом случае не требуется требование для массива-конроллера значения должны быть массивами. Я думаю, ваши значения будут поступать как не массив. – Vaibhav

ответ

2

Проблема с вашим JSBin оказывается довольно простой. В упрощенном роутере в вашем исходном сообщении у вас есть this.resource('items', { path: 'admin'}, function() {});.
Поскольку вы передаете функцию this.resource, это означает, что она имеет неявный вложенный this.route('index').

Однако в вашем JSBin у вас есть this.resource('items, { path: 'admin' });.
Поскольку вы не передаете функцию в этом случае, нет никакого неявного маршрута index.

Решение состоит в том, чтобы добавить либо функцию бит, или переименовать App.ItemsIndexRoute к App.ItemsRoute и data-template-name="items/index" к data-template-name="items".

JSBin с последнего: http://emberjs.jsbin.com/dahuge/2/edit?html,js

P.S. я также подготовил JSBin, используя только this.route, который в настоящее время более будущие люди: http://jsbin.com/mifamu/9/edit?html,js,output

0

Ответил на IRC одним очень полезным "замков". Некоторые проблемы остаются, но на большой вопрос ответил this JSBin. Моя самая большая путаница возникла из-за непонимания того, как обрабатываются URL-адреса, и какова роль помощника link-to. То, что я больше всего нужны были изменения в ItemsController:

App.ItemsController = Ember.ArrayController.extend({ 
    needs: ['shop'], 
    shop: Ember.computed.alias('controllers.shop.model') 
}); 

который сделает shop доступным, и ошибка в шаблоне говоря items вместо model.

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