2014-03-25 21 views
3

我想用嵌套路由先渲染一个集合。一旦呈现集合,点击一个项目(使用链接)呈现出口中的特定项目。迄今为止这一切都很好。Ember Routing - 在页面刷新时不调用模型钩子

我有问题刷新页面不会调用我的嵌套资源的'模型'钩虽然。

从Ember的网站http://emberjs.com/guides/routing/specifying-a-routes-model/

如果用户直接与URL 包含动态段访问你的应用程序会发生什么?例如,他们可能会重新加载 页面,或将链接发送给一个朋友,点击它。在那个时候,因为我们从头开始应用程序,所以显示的实际的 JavaScript模型对象已经丢失;我们所有的是来自URL的 ID。

幸运的是,灰烬会从该网址提取任何动态细分为您 ,并将它们传递作为哈希到模型钩作为第一个参数

这里是我的代码:

Admin.Workqueues.App.Router.map(function() { 
    this.resource('delinquencies', function() { 
    this.resource('delinquency', { 
     path: '/:id' 
    }); 
    }); 
}); 

Admin.Workqueues.App.DelinquenciesRoute = Ember.Route.extend({ 
    model: function() { 
    // Does XHR here and fetches a collection of items to render. 
    // Returns a promise 
    } 
}); 

Admin.Workqueues.App.DelinquencyRoute = Ember.Route.extend({ 
    model: function (params) { 
    debugger; // This doesn't get called 
    } 
}); 

因此,使用此代码,将/延迟列出了整个集合。点击一个项目打开一个拖欠对象在/拖欠/ 3但现在刷新页面不会调用拖欠路线的模型挂钩。

我不知道我错过了什么。有任何想法吗?如果它的事项,我使用:

恩贝尔:1.2.0

灰烬数据:1.0.0-beta.7 + canary.f482da04

把手:1.1.1

+0

而你正在碰到'拖欠/ 7'或类似的东西? – Kingpin2k

+0

@ kingpin2k是的! – Rajat

+0

重定向的失败路由中是否还有其他内容,或者是当前正在使用的代码之上的代码?您确定DelinquencyRoute实际上是否包含在页面中,Ember是不是为您创建虚拟路线? – Kingpin2k

回答

2

您不应将资源定义为子资源,而应将其作为单独资源。

Admin.Workqueues.App.Router.map(function() { 
    this.resource('delinquencies', function() {}); 
    this.resource('delinquency', { path: '/:delinquency_id' }); 
}); 

您的代码现在工作的原因是因为链接助手已经提供了上下文,所以模型挂钩永远不会被调用。

对于在DelinquencyRoute模型挂钩,你应该使用这样的事情:

return this.store.find('delinquency', params.delinquency_id); 

欲了解更多信息,看看导游和入门教程: http://emberjs.com/guides/routing/defining-your-routes/(动态段段回答您的问题)