Ember控制器依赖解析不能在直接链接上工作

Ember controller dependency resolution not working on direct links?

本文关键字:链接 工作 不能 控制器 依赖 Ember      更新时间:2023-09-26

我在Ember中使用控制器之间的依赖解析,只要你沿着这条路线导航,它就能很好地工作。但是,如果你直接链接到有一个依赖的控制器的视图,它就不能工作,并出现以下错误信息:

needs [ controller:productsDetailIndex ] but it could not be found

对应控制器:

Pd.ProductsDetailOrderController = Ember.Controller.extend({
    needs: "productsDetailIndex"
});

路由器:

Pd.Router.map(function () {
    this.resource('products', { path: '/products' }, function () {
        this.resource('products.detail', { path: '/:product_id' }, function() {
            this.route('order');
        });
    });
});
Pd.ProductsIndexRoute = Ember.Route.extend({
    model: function () {
        return this.store.all('product');
    }
});
Pd.ProductsDetailIndexRoute = Ember.Route.extend({
    model: function(params){
        return this.store.getById('product', params.product_id);
    }
});
Pd.ProductsDetailOrderRoute = Ember.Route.extend({
});

所以,如果我去/products/3,点击链接打开/products/3/oder,这一切都很好。但是如果我直接链接到/products/3/order,上面的错误出现了。

如果您的逻辑依赖于不在其路径中的控制器,那么您就遇到了架构问题。在您的特殊情况下,资源在其路径中,因此您应该将索引控制器中的任何逻辑移动到'productsDetail'控制器中。

Pd.ProductsDetailRoute = Ember.Route.extend({
    model: function(params){
        return this.store.getById('product', params.product_id);
    }
});
Pd.ProductsDetailIndexRoute = Ember.Route.extend({
    model: function(params){
        return this.modelFor('productDetails');
    }
});