1

从这篇文章看来,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 无法正确解析控制器。不知道如何解决这个问题......

4

2 回答 2

0

哇?!子目录工作得很好。首先,我不确定使用viewsitems作为路由名称是否是最好的主意,因为它们都非常通用,并且还用于某些 ember 内部结构并且可能会混淆事物。声明一个名为的模型View甚至可能会破坏您的应用程序中的内容。

您的控制器/路由/模板结构router.js如下:

<controllers|routes|templates>/cm.js
<controllers|routes|templates>/cm/index.js
<controllers|routes|templates>/cm/views.js

而且我不确定views.items会是什么样子,因为这可能更适合将视图作为资源,或者在名称中使用破折号,在这种情况下,路由声明将是this.route('views-items', {path: '/views/items'});

总的来说,我认为你的路由器定义应该是这样的:

this.resource('cms', function() {
  this.resource('cm', {path: '/:cm_id'}, function() {
    this.route('views');
    this.route('views-items', { path: '/views/items' });
  });
});

这并不是开玩笑——我是来帮忙的——但我认为您需要花更多时间阅读 Ember 的路由文档,以了解 Ember 对某些路由器定义所期望的约定。此外,在调试路由器问题时,ember 检查器工具非常有用:https ://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi

于 2015-01-07T21:15:42.673 回答
0

这是因为 a 中的model钩子的route工作方式与控制器中的不同。

在一个route它是一个可以返回一个promise的方法中,该路由将在设置控制器之前等待promise被解决。

在控制器中,它只是一个属性,直到你执行它才会被执行get,即使那样,你也会得到它的一个承诺。

于 2015-01-07T20:36:39.043 回答