强制渲染路径以在渲染之前请求其他数据

时间:2014-06-03 05:09:41

标签: ember.js ember-data

我试图获取嵌套路由来请求其他数据,更新记录,然后渲染视图。见下文:

// models
var attr = DS.attr,
    hasMany = DS.hasMany,
    belongsTo = DS.belongsTo

App.List = DS.Model.extend({
    title: attr('string'),
    links: hasMany('link')
})

App.Link = DS.Model.extend({
    list: belongsTo('list'),
    subtitle: attr('string'),
})

// JSON for index route
{
    "list": [
        {
            "id": 532,
            "title": "first list"
         },
         {
            "id": 991,
            "title": "second list"
         },
         {
            "id": 382,
            "title": "third list"
         }
    ]
}

// JSON for list route - /user/532
{
    "list": 
        {
            "id": 532,
            "title": "list numero uno",
            "links" : [1, 2]
         },
    "link": [
        {
            "id": 1,
            "subtitle": "this is a subtitle of the firsto listo!"
        },
        {
            "id": 2,
            "subtitle": "this is a subtitle of a second part in the list"
        }
    ]
}

// routing
this.resource('user', function(){
    this.route('list', {path: ':id'})
})
App.UserRoute = Ember.Route.extend({
    model: function(){
        return this.store.find('list')
    }
})
App.UserListRoute = Ember.Route.extend({
    model: function(params) {
        return this.store.find('list', params.id)
    }
})

我希望索引路由显示一个只包含{{title}}的基本列表,然后单击一个将其链接到UserListRoute,然后再进行另一个ajax调用以使用其他链接数据更新记录。我尝试过添加:

afterModel: function(modal){
    model.reload()
}

UserListRoute,但它最初使用索引路由模型,然后使用新数据重新加载。我试图避免这种情况,并让它立即发送ajax请求然后呈现内容 - 所以我不希望它依赖于父模型/数据。

2 个答案:

答案 0 :(得分:1)

创建不同的记录类型,并从原始类型扩展,或者只使用完全不同的模型。

App.BasicList = DS.Model.extend({
 foo: DS.attr()
});


App.FullList = App.BasicList.extend({
  //foo
  bar: DS.attr()
});

App.UserListRoute = Ember.Route.extend({
    model: function(params) {
        return this.store.find('fullList', params.id)
    }
})

答案 1 :(得分:0)

我尝试使用kingpin2k的答案,并且它在页面刷新上工作,但是从用户索引导航到嵌套仍导致它使用父模型。我弄清楚为什么它没有使用正确的模型。我在用户索引模板上的链接是:

{{#link-to 'user.list' this}} {{title}} {{/link-to}}

因此,正确点击链接会将我重定向到/users/:id,但会传递所选项目的数据。为了解决这个问题,我做了:

{{#link-to `user.list` id}} {{title}} {{/link-to}}

因此,通过将this更改为id,当它转换到路径时,它会使用路径中指定的相应模型。