Ember 在第一次请求后不按 id 请求模型

Posted

技术标签:

【中文标题】Ember 在第一次请求后不按 id 请求模型【英文标题】:Ember not requesting models by id after first request 【发布时间】:2013-08-22 00:32:37 【问题描述】:

所以,

我正在开发一个 Ember 应用程序并遇到一个令人困惑的问题。在索引路由应用程序执行 find() 并返回一个数组

dataset
并链接到模板以显示有关每个
dataset
的更多详细信息,这些详细信息在通过 id 进行查找时被侧载。 (即 find(1),其中 1 是 id。)

第一个带有 id 的请求可以正常工作,返回数据集对象及其侧载数据,但是后续请求似乎没有做任何事情。如果我在加载第一个数据集的详细信息后尝试导航到任何其他数据集,则服务器看不到任何请求。但是,如果我从特定数据集导航回索引,然后返回任何数据集,它将再次发送请求(甚至两次,不确定这是否是相关问题)并正常工作。换句话说: /# 作品 /#/1 也可以(或任何其他 id,只要它是第一个访问的) /#/1 然后 /#/2 不起作用,没有发送请求 /#/1 后跟 /# 然后 /#/2 确实工作,维护 /#/1 的数据并获取 /#/2 的新数据。

如何让所有特定的数据集对象在访问它们时返回,而不需要在索引处出现 hacky 进站?任何建议将不胜感激,在此先感谢您!

代码:

-app.js

/****************************** * 应用 ******************************/ var App = Em.Application.create(); App.Router.map(function() this.resource('application', path:'/', function() this.resource('dataset', path: '/:dataset_id', function() ); ); ); App.ApplicationRoute = Em.Route.extend( 模型:函数() 返回 App.Dataset.find(); ); App.DatasetRoute = Em.Route.extend( 激活:函数() this.modelFor('dataset').reload(); ); /****************************** * 楷模 ******************************/ App.Store = DS.Store.extend( 适配器:DS.RESTAdapter.create( url: 'http://***.***.***.***:5000', 命名空间:'api', 序列化器:DS.RESTSerializer.extend( 主键:功能(类型) 返回'_id'; ) ) ); App.Dataset = DS.Model.extend( 数据集:DS.attr('string'), 标题:DS.attr('string'), 积分:DS.hasMany('App.Point') ); App.Point = DS.Model.extend( 数据集:DS.attr('string'), dataset_id: DS.attr('string'), 日期:DS.attr('日期'), 值:DS.attr('string') );

【问题讨论】:

【参考方案1】:

路由的activate 钩子仅在路由第一次转换到时被调用。如果路由的模型发生变化,则不会再次调用它。因此,当您通过直接输入 url 或单击索引页面上的链接转换到 App.DatasetRoute 时,activate 挂钩运行并重新加载您的数据集。当您从#/1 切换到#/2 时,路由保持活动状态并且不会调用任何挂钩。

如果我正确理解您的问题,您希望在用户访问其网址时重新加载数据集。在这种情况下,您可能想要做的是观察数据集控制器内容的变化,而不是路由的激活钩子。像这样的东西应该可以工作:

App.DatasetController = Ember.ObjectController.extend(
  refreshOnChange: function() 
    var dataset = this.get('content');
    if (dataset) 
      console.log('reloading dataset ', dataset.toString());
      dataset.reload();
    
  .observes('content')

【讨论】:

以上是关于Ember 在第一次请求后不按 id 请求模型的主要内容,如果未能解决你的问题,请参考以下文章

如何中止Ember Data发出的HTTP请求?

如何定期更新 Ember 的模型(例如在 setInterval 中)?

vue 第一次axios请求得到一个数组,然后根据循环数组获得id进行第二次axios请求,请问如何处理速度最快?

如何使用python登录页面,该页面需要服务器在第一次请求时响应的会话ID?

ember成员行为规范化响应

如何从express中的PATCH请求获取请求有效负载