我在使用ember-data建模层次结构并设置正确的路由(revison 11
,ember 1.0.0-pre4
)时遇到问题
我的模型基本上是Forum
,具有深层次结构(RootForum
- > SubForum
- > SubSubForum
[...]
)。
/**
* Setup routes
*/
App.Router.map(function () {
this.resource('forums');
this.resource('node', {path: 'node/:node_id'});
});
forums
将列出所有根论坛node
将列出特定节点的所有论坛(论坛的子论坛)App.Node = DS.Model.extend({
name: attr('string'),
forums: DS.hasMany('App.Forum')
});
App.Forum = DS.Model.extend({
name: attr('string'),
node: DS.belongsTo('App.Node')
});
// Only defined Forums Route because we will query for all Forums that have an empty (root) path
App.ForumsRoute = Ember.Route.extend({
model: function() {
return App.Forum.find({path: ""});
}
});
GET /forums
{"node": {
"id": "root",
"name": "root",
"forums": ["Europe", "Africa"]
}, "forums": [
{
"name": "Europa",
"node_id": "root",
"id": "Europe"
},
{
"name": "Afrika",
"node_id": "root",
"id": "Africa"
}
]}
GET /node/Europe
{"node": {
"name": "Europa",
"forums": ["Europe_Germany", "Europe_France"]
}, "forums": [
{
"name": "Deutschland",
"node_id": "Europe",
"id": "Europe_Germany"
},
{
"name": "Frankreich",
"node_id": "Europe",
"id": "Europe_France"
}
]}
我现在遇到问题,在我的模板中使用node
帮助程序以编程方式触发#linkTo
路径:
<script type="text/x-handlebars" data-template-name="forums">
<table>
{{#each forum in controller}}
<tr>
<td>{{#linkTo "node" forum}} {{forum.name}} {{/linkTo}}</td>
</tr>
{{/each}}
</table>
</script>
如果我点击生成的链接,我就成功收到了/#/node/Europe
的浏览器哈希更改事件,但没有请求我的服务器来获取此论坛子节点。但是:如果我刷新浏览器,它会成功拨打电话。
这让我想到了这个问题,ember
或许会想到“我已经有了这个论坛,所以我不需要再次获取它”。但是:对我而言,它更像是一个查询,而不是一个论坛元素的获取。有没有机会在没有“hacky”方法的情况下在ember中建模我的用例?