Es ist schwer herauszufinden, warum Controller-Eigenschaften, die in init()
hinzugefügt wurden, als 'undefined
' hinzugefügt werden und nicht mit den Standardwerten. Ich denke, Sie sollten in init()
definieren, um "leaking state" zu vermeiden? Ich denke, ich vermisse hier etwas Grundlegendes.Ember: Controller-Eigenschaften in init() einstellen?
Wenn eine Controller-Eigenschaft wie ein leeres Array direkt auf dem Controller angegeben wird, wird sie als 'Array[0]
' hinzugefügt, was Ihnen dann ermöglicht, pushObject
hineinzupacken. Wenn sie in init()
hinzugefügt werden, werden sie als "undefined
" hinzugefügt, so dass fehlschlägt.
Siehe Demo auf diesen twiddle und/oder dem folgenden Code:
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'
});
Grundsätzlich ist ich will, um herauszufinden, wie meine Liste der Abfrage params an einem Ort zu erklären (wie in der Konfigurationsdatei), anstelle von 3 Stellen (Route, Controller QueryParams Array und zum Controller selbst)
Ich habe eine twiddle erstellt, um zu veranschaulichen, was ich meine.