SO,
我正在开发一个Ember应用程序并遇到一个令人困惑的问题。在索引路径上,app执行find()并返回
dataset数组并链接到模板以显示有关每个
dataset的更多详细信息,这些信息在进行请求时会被加载通过id找到。 (即find(1),其中1是id。)
带有id的第一个请求正常工作,返回数据集对象及其侧载数据,但后续请求似乎没有做任何事情。如果我在加载第一个数据后尝试导航到任何其他数据集,则服务器不会看到任何请求。但是,如果我从特定数据集导航回索引然后返回到任何数据集,它将再次发送请求(两次甚至,不确定这是否是相关问题)并且正常工作。换句话说:
/#works
/#/ 1也有效(或任何其他id,只要它是第一个访问过的)
/#/ 1然后/#/ 2不起作用,没有请求发送
/#/ 1后跟/#then /#/ 2 工作,将数据保存在/#/ 1&获取/#/ 2的新数据。
如何在访问时返回所有特定数据集对象,而不会在索引处进行hacky进站?任何建议将不胜感激,谢谢你提前!
代码:
-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') });
答案 0 :(得分:3)
路由的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')
}