ember控制器内的子目录无法正常工作

时间:2015-01-07 20:29:33

标签: ember.js ember-cli ember-controllers

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

2 个答案:

答案 0 :(得分:0)

因为model中的route挂钩的工作方式与控制器不同。

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

在控制器中,它只是一个属性,直到你get它才会被执行,即便如此,所有你都会得到它的承诺。

答案 1 :(得分:0)

笏?子目录工作得很好。首先,我不确定使用viewsitems作为路由名称是最好的主意,因为它们都非常通用,并且也用于某些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