Ember.js 余烬在第一次请求后未按id请求模型

Ember.js 余烬在第一次请求后未按id请求模型,ember.js,Ember.js,所以 我正在开发一个Ember应用程序,遇到了一个令人困惑的问题。在索引路径上,应用程序执行find()并返回一个数据集数组和指向模板的链接,以显示有关每个数据集的更多详细信息,当重新请求按id查找时,这些数据集会被侧向加载。(即find(1),其中1是id。) dataset dataset 第一个id为的请求工作正常,返回dataset对象及其侧加载的数据,但是后续请求似乎没有任何作用。如果在加载第一个数据集的详细信息后尝试导航到任何其他数据集,则服务器不会看到任何请求。但是,如果我从一个特

所以

我正在开发一个Ember应用程序,遇到了一个令人困惑的问题。在索引路径上,应用程序执行find()并返回一个数据集数组和指向模板的链接,以显示有关每个数据集的更多详细信息,当重新请求按id查找时,这些数据集会被侧向加载。(即find(1),其中1是id。)

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

我如何让所有特定的数据集对象在访问它们时返回,而不必在索引中使用hacky pitstop?如果您有任何建议,我们将不胜感激,提前谢谢您

守则:

-app.js

/************************** * Application **************************/ 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({ model: function() { return App.Dataset.find(); } }); App.DatasetRoute = Em.Route.extend({ activate: function() { this.modelFor('dataset').reload(); } }); /************************** * Models **************************/ App.Store = DS.Store.extend({ adapter: DS.RESTAdapter.create({ url: 'http://***.***.***.***:5000', namespace: 'api', serializer: DS.RESTSerializer.extend({ primaryKey: function(type) { return '_id'; } }) }) }); App.Dataset = DS.Model.extend({ dataset: DS.attr('string'), title: DS.attr('string'), points: DS.hasMany('App.Point') }); App.Point = DS.Model.extend({ dataset: DS.attr('string'), dataset_id: DS.attr('string'), date: DS.attr('date'), value: DS.attr('string') }); /************************** *应用 **************************/ var App=Em.Application.create(); App.Router.map(函数(){ 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({ primaryKey:函数(类型){ 返回“_id”; } }) }) }); App.Dataset=DS.Model.extend({ 数据集:DS.attr('string'), 标题:DS.attr('string'), points:DS.hasMany('App.Point') }); App.Point=DS.Model.extend({ 数据集:DS.attr('string'), 数据集_id:DS.attr('string'), 日期:DS.attr(“日期”), 值:DS.attr('string') });
仅当路由第一次转换到时,才会调用路由的
activate
hook。如果管线的模型发生更改,则不会再次调用它。因此,当您通过直接输入url或单击索引页上的链接过渡到
App.DatasetRoute
时,
activate
钩子将运行并重新加载数据集。当您从
#/1
切换到
#/2
时,路由将保持活动状态,并且不会调用挂钩

如果我正确理解了您的问题,那么您希望在用户访问其url时重新加载数据集。在这种情况下,您可能要做的不是路由的激活钩子,而是观察dataset控制器内容的更改。像这样的方法应该会奏效:

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