在Ember,如何保持父路线的模型与子路线一致?

时间:2013-11-07 19:28:49

标签: ember.js

以下是我的路线:

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}}

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

我无法看到如何通知父路线其子女的情况。

我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这里可能存在两种误解

  1. 您的子路线建立在父路线上,但不要修改它(更多 下面)也许与你想要达到的目标不匹配 和URL结构
  2. 不会为linkTo调用模型方法(因为 linkTo正在提供模型)。如果有人直接进入了 路线他们将被称为
  3. 网址/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")
    });