Ember路由器转换到带有参数的嵌套路由

时间:2013-04-08 20:41:29

标签: ember.js ember-data

App.Router.map(function() {
    this.resource('documents', { path: '/documents' }, function() {
        this.route('edit', { path: ':document_id/edit' });
    });
    this.resource('documentsFiltered', { path: '/documents/:type_id' }, function() {
        this.route('edit', { path: ':document_id/edit' });
        this.route('new');
    });
});

此控制器带有子视图事件,基本上转换为已过滤的文档

App.DocumentsController = Ember.ArrayController.extend({
    subview: function(context) {
    Ember.run.next(this, function() {
        //window.location.hash = '#/documents/'+context.id;
        return this.transitionTo('documentsFiltered', context);
    });
},
});

我的问题是,当页面的Hash更改时,此代码可以正常工作。

但是,当我运行上面的代码时,没有位置的位置和w / Ember本地transitionTo我得到了一个神秘的

  

未捕获的TypeError:对象[object Object]没有方法'slice'

任何线索?

由于

更新:

App.DocumentsFilteredRoute = Ember.Route.extend({
model: function(params) {
    return App.Document.find({type_id: params.type_id});
},
});

{{#collection contentBinding="documents" tagName="ul" class="content-nav"}}
<li {{action subview this}}>{{this.nameOfType}}</li>
{{/collection}}

1 个答案:

答案 0 :(得分:4)

问题是你的模型钩子正在返回一个数组,而在你的过渡中你正在使用单个对象。根据经验,对transitionTo的调用应该传递模型钩子返回的相同数据结构。遵循这条经验法则,我建议您执行以下操作:

App.DocumentsController = Ember.ArrayController.extend({
    subview: function(document) {
        var documents = App.Document.find({type_id: document.get("typeId")});
        Ember.run.next(this, function() {
            return this.transitionTo('documentsFiltered', documents);
        });
    }
});

注意:我假设type_id存储在属性typeId中。也许你需要根据自己的需要进行调整。