从这篇文章中看来,ember控制器中的子目录应该可以工作。
https://github.com/ember-cli/ember-cli/issues/1219
然而它不适合我。
这里是我的代码分支(目录cm包含子目录视图):
/controllers/cm/views/item.js
/routes/cm/views/item.js
/templates/cm/views/item.js
当我尝试使用下面的代码在路线中填充模型时,我会看到数据,但是当我在控制器中放入相同的代码时,它永远不会被执行。
model: function(){
return this.store.find('item',{id: "1"});
}
router.js中的条目如下:
this.resource('cm', {path: '/cm/:id'} , function() {
this.route('views');
this.route('views.items', {path: '/views/items'});
});
很明显,ember无法正确解析控制器。 不知道如何解决这个问题......
答案 0 :(得分:0)
因为model
中的route
挂钩的工作方式与控制器不同。
在route
中,它是一个可以返回promise的方法,路由将等待在设置控制器之前解析promise。
在控制器中,它只是一个属性,直到你get
它才会被执行,即便如此,所有你都会得到它的承诺。
答案 1 :(得分:0)
笏?子目录工作得很好。首先,我不确定使用views
或items
作为路由名称是最好的主意,因为它们都非常通用,并且也用于某些ember内部,并且可能会混淆事物。声明一个名为View
的模型甚至可能会破坏您应用中的内容。
router.js
的控制器/路由/模板结构如下:
<controllers|routes|templates>/cm.js
<controllers|routes|templates>/cm/index.js
<controllers|routes|templates>/cm/views.js
而且我不确定view.items会是什么样子,因为这可能更适合于将视图改为资源,或者在名称中使用破折号,在这种情况下,路径声明将是{{1 }}
总的来说,我认为您的路由器定义应如此:
this.route('views-items', {path: '/views/items'});
这不是一个讽刺 - 我在这里提供帮助 - 但我认为您需要花更多时间使用Ember的路由文档来了解Ember期望某些路由器定义的约定。此外,在调试路由器问题时,ember检查器工具是一个非常重要的资产:https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi