很难弄清楚为什么init()
中添加的控制器属性被添加为' undefined
'而不是默认值。我想你应该在init()
中定义以避免" leaking state"?我想我在这里缺少一些基本的东西。
当在控制器上指定了一个像空数组这样的控制器属性时,它被添加为' Array[0]
'然后允许你pushObject
填入它。在init()
中添加时,会将其添加为&{39; undefined
'所以pushObject
失败了。
请参阅此twiddle和/或以下代码的演示:
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['q','sort_method','search_type','filter1','filter2'],
init(){
this._super(...arguments);
Ember.set(this, 'q', null);
Ember.set(this, 'sort_method', 'relevance'); // <-- sets default value to 'undefined'
Ember.set(this, 'filter1', []); // <-- sets default value to 'undefined'
},
filter2: [], // <-- sets default values properly but will it cause state issues?
search_type: 'bar'
});
基本上,我想知道如何在一个地方(比如在配置文件中)声明我的查询参数列表,而不是3个地方(路由,控制器queryParams数组,以及控制器本身)< / p>
我创建了一个twiddle来说明我的意思。
答案 0 :(得分:0)
为什么在init()中添加的控制器属性被添加为&#39; undefined&#39;
如果你深入挖掘余烬来源,你会在Ember.Route找到很多代码,&#34;准备&#34;查询参数有效(例如,您可以尝试分析this code)。我猜这个问题的答案是在路由代码中的某个地方(可能在控制器的初始化之前/之后路由初始化属性或类似的东西)。
基本上,我想知道如何在一个地方(比如在配置文件中)声明我的查询参数列表,而不是3个地方(路由,控制器queryParams数组,以及控制器本身)< / p>
您可以在environment.js中声明参数。然后,在控制器中导入它并传递给Ember.Controller.extend
import ENV from 'project-name/config/environment';
export default Ember.Controller.extend(Ember.$.extend({}, ENV.myDefaults.controller, {
actions: {
addFilter: function(key, value) {
alert(`adding "${value.toString()}" to controller property '${key}'`);
console.log("DUMP OF EMBER 'this':", this);
this[key].pushObject(value.toString());
}
}
}));