0

这是我的路线:

this.resource('kb_obj', {path: '/kb/:data_type'}, function() {
  this.resource('kb_obj_show', {path: '/:id'}, function() {
    this.route('with_breadcrumb', {path: '/:breadcrumb'});
  });
  this.resource('kb_filtered_page', {path: '/:filter_params/page/:page_id'}, function() {
    this.route('index', {path: '/'});
  });
});

如您所见,KbObjRoute 的主要工作是存储当前数据类型。

我的问题是当有人点击这样的链接时:

{{#linkTo 'kb_obj_show.with_breadcrumb' this this}}{{name}}{{/linkTo}}

modelor方法不会在setupControllerKbObjRoute 上触发,因此它永远不会更新其数据类型,并且任何依赖于该信息的内容(例如主导航链接)都不会更新。

我看不到如何通知父路由它的孩子发生了什么。

我错过了什么吗?

谢谢!

4

1 回答 1

0

我认为这里可能有两个误解

  1. 您的子路由建立在父路由上但不修改它(更多下文)可能与您要实现的目标和 URL 结构不匹配
  2. 不会为 linkTo 调用模型方法(因为 linkTo 正在提供模型)。如果有人直接掉入路线,他们将被呼叫

URL/kb/image可能会加载一堆图像作为模型。 /kb/image/123是这些图像之一。更改123的 data_type 不会冒泡并更改动态段。

话虽如此,路由和控制器可以通过几种方式相互依赖。

使用路线,您可以使用该modelFor方法,在您的情况下,我认为它是:

this.modelFor('kb_obj')

使用控制器,您将使用needs数组。因此,如果您想从另一个控制器获取模型或属性,您可以这样做:

App.SubController = Ember.ObjectController.extend({
  needs: "otherController",
  linkedProperty: Ember.computed.alias("controllers.otherController.model.itsProperty")
});
于 2013-11-08T04:50:55.100 回答