我在控制器中有一个功能,用于检查是否可以通过transtionToRoute更改路径
首先,我使用本地存储适配器创建一个新记录,然后我想更改路由:
var i = this.store.createRecord('axisModel', {
id: Math.random().toString(32).slice(2).substr(0, 5), //random ID generator
uniqueName: item.uniqueName,
name: item.name,
hierarchyUniqueName: item.hierarchyUniqueName,
type: 'filter',
isMeasure: item.isMeasure,
orderId: "",
isActive: true
});
i.save();
this.transitionToRoute('filters', item);
过滤器路由代码是这样的:
App.FiltersRoute = Ember.Route.extend({
model:function(params){
console.log('here');
return this.store.find('axisModel',params.filters_id);
}
});
但是当路线发生变化时,我看不到console.log()的'here',我也得到了这个错误:
Assertion failed: Error while loading route: TypeError: Object [object Object] has no method 'addArrayObserver'
答案 0 :(得分:1)
我认为您在each
模板中使用filters
视图助手并引用模型,但它不是数组的对象:
{{#each}} ...
或
{{#each model}} ...
因此您将收到此错误,因为视图助手将尝试添加观察者以在阵列更改时更新ui。但是ember对象没有addArrayObserver
方法,并且会抛出此错误。
您可以删除每个,或者如果您希望获得多个结果,请使用store.filter
:
this.store.filter('axisModel', function(model) {
model.get('someProperty') == otherProperty;
});
答案 1 :(得分:1)
如果要查询记录数组,find
的第二个参数应该是带查询参数的对象,例如。
model: function(params) {
return this.store.find('axisModel', { filter: params.filters_id });
}
由于您只是传递一个ID,您将查询单个记录(具有该ID),并且您生成的控制器将是一个ObjectController(而不是ArrayController),它不能与#each
一起使用。
答案 2 :(得分:0)
当您在内部转换到路线时,在您的Ember应用中,使用link-to
,transitionTo
或transitionToRoute
会跳过model
挂钩。 Ember希望您在转换时将要使用的模型传递到路径中。这就是为什么你没有像你期望的那样看到console.log
陈述。
另一个可能的问题是,当你这样称呼时:
this.transitionToRoute('filters', item)
您提供的单个项目为model
路由的'filters'
。但是如果你要重新加载,并且要触发model
钩子,那么你将使用以下命令返回一个集合:
this.store.find('axisModel',params.filters_id)