我是Ember的新手,我觉得我比这个练习应用程序更容易咀嚼,但我打算学习。我可能完全在概念上关闭,如果是这样,请随意为我的用例提供更好的结构。
我的(缩写)路由看起来或多或少像这样:
Router.map(function() {
this.resource('shops', { path: '/' }, function() {
this.resource('shop', { path: ':shop_id' }, function() {
this.resource('items', { path: 'admin'}, function() {
});
});
});
});
意图是用户将选择一个商店,然后获得所有可能商品的列表,其中包含复选框,他可以决定该商店中哪些商品可用,哪些商品不可用。到目前为止,我只是想显示所有项目的列表,但它不起作用。然而,商店列表 - 没有任何问题。
网址:/
作品。 model
是所有商店。
网址:/1
作品。 model
是ID为1的商店。
网址:/1/admin
处理路径时出错:items.index断言失败:ArrayProxy需要一个Array或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({});
是什么给出了?
编辑: JSBin
答案 0 :(得分: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。我还准备了一个仅使用this.route
的JSBin,目前对未来更友好:http://jsbin.com/mifamu/9/edit?html,js,output
答案 1 :(得分: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
。