Ember.js TransionToRoute不钩住模型
我在控制器中有一个功能,可以检查是否有问题,使用TransionToRoute更改路由 首先,我使用本地存储适配器创建一个新记录,然后我想更改路由:Ember.js TransionToRoute不钩住模型,ember.js,ember-data,Ember.js,Ember Data,我在控制器中有一个功能,可以检查是否有问题,使用TransionToRoute更改路由 首先,我使用本地存储适配器创建一个新记录,然后我想更改路由: var i = this.store.createRecord('axisModel', { id: Math.random().toString(32).slice(2).substr(0, 5), //random ID generator uniqueName: item.uniqueName
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'
我认为您正在使用
过滤器模板中的每个视图辅助对象并引用模型,但它是一个对象而不是数组:
{{#each}} ...
或
因此,您将收到此错误,因为当数组更改时,视图帮助器将尝试向更新的ui添加观察者。但是ember对象没有addArrayObserver
方法,将抛出此错误
您可以删除每个结果,或者如果希望得到多个结果,请使用store.filter
:
this.store.filter('axisModel', function(model) {
model.get('someProperty') == otherProperty;
});
如果要查询记录数组,则find
的第二个参数应该是具有查询参数的对象,例如
model: function(params) {
return this.store.find('axisModel', { filter: params.filters_id });
}
由于您只是传递一个ID,因此您将查询一条记录(具有该ID),并且生成的控制器将是一个ObjectController(而不是ArrayController),当您从您的Ember应用程序内部过渡到路由时,使用链接到,该控制器不与#每个一起工作,过渡到
,或过渡路线
将跳过模型
挂钩。Ember希望您在转换时将要使用的模型传递到管线中。这就是为什么您没有像预期的那样看到console.log
语句的原因
另一个可能的问题是,当您称之为:
this.transitionToRoute('filters', item)
您为'filters'
路线提供了一个项目作为模型
。但是,如果要点击“重新加载”,并使模型
钩子开火,则使用以下命令返回集合:
this.store.find('axisModel',params.filters_id)
项目
来自哪里?
this.store.find('axisModel',params.filters_id)