为什么在路由更改时不发出 HTTP 请求?

Why isn't an HTTP request being issued when the route changes?

我有一个带有以下路由器的 Ember 项目:

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
  this.route('index', {path: '/'}, function() {
    this.route('folder', {path: 'folder/:folder_id'});
  });
});

export default Router;

routes/index/folder.js内容如下:

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    console.log(params);
    return this.store.query('message', {folder_id: params.folder_id});
  }
});

我的预期是,当路由更改为 /folder/1 时,将调用 model() 方法来获取文件夹的消息。

然而,这并没有发生。路线确实发生了变化,但从未调用 model() 方法(没有任何内容写入控制台)。

我错过了什么?

尝试从命令行使用 ember cli 生成路由: ember g route folder

它将在适当的位置创建您需要的所有文件,并相应地编辑router.js

通过这种方式,我认为您将获得一条可以回答 /folder 的路线。然后更改 router.js,添加路由路径并点击 /folder/1。如果没有任何反应,请检查控制台是否有错误,可能是 message 模型不存在。

如果我不得不猜测,您正在使用 {{#link-to 'index.folder' aModel}} 并且由于已经提供了模型,因此无需再次获取它。如果你这样做 {{#link-to 'index.folder' aModel.id}} 它会再次触发 model 挂钩,因为没有提供模型。

您可以在此 Twiddle 中看到模型挂钩在您的示例中通过直接访问路径 folder/12 调用(而不是通过 link-to)。

Routing Guide 对此进行了详细介绍。