2017-02-10 4 views
1

Gibt es eine einfache Möglichkeit, Controller-Eigenschaften direkt aus einem Javascript-Objekt hinzuzufügen?Ember: ganzes Objekt zum Controller hinzufügen

Im Gegensatz zu müssen jeden Abfrageparam manuell an drei Stellen angeben: queryParams, QP-Controller-Eigenschaften und Route queryParams [Schlüssel] .refreshModel = true ... Ich möchte nur dieses Zeug zu pflegen in einem Objekt und aktualisieren sie es an all diesen Orten:

const cfg = { 
    defaultQueryParams: { 
     q: null, 
     paging: '18', 
     search_sort: 'relevance', 
     search_title: null, 
     search_page: null, 
     filter_breadcrumb: [], 
     filter_price: [], 
     filter_size_apparel: [], 
     filter_color: [] 
    } 
}; 

in der Steuerung ich habe versucht:

export default Ember.Controller.extend({ 
    queryParams: Object.keys(cfg.defaultQueryParams), // works great! 

    init() { 
     this._super(...arguments); 
     this.addObject(cfg.defaultQueryParams); // doesn't work: "this.addObjects is not a function" 
     // same with addObjects, setObjects 
    }, 
    ... 
}); 

ich habe auch versucht, über das JS-Objekt iteriert und die Setter verwenden. Es funktioniert für Streicher, aber nicht für die leeren Felder:

for (let [key, value] of Object.entries(cfg.defaultQueryParams)) { 
     this.set(key, value); 
    } 

Die Arrays werden als Eigenschaften hinzugefügt, aber in der Konsole nicht definiert sind, anstatt Array [0]

Bin ich weg Basis zu wollen tun das oder willst du es so machen?

Gehen Sie einfach! Ember newb! : D

+0

„Die Arrays als Eigenschaften hinzugefügt werden, aber in der Konsole statt Array nicht definiert ist [0]“. Wie überprüfen Sie das? – nem035

+0

console.log (dies); aus einer meiner Controller-Aktionen heraus. Ich kann die Klasse in der Konsole erweitern und sehe es sagt "filter_breadcrumb: undefined" Wenn ich stattdessen filter_breadcrumb: [], ... direkt auf den Controller hinzufügen und dasselbe tun, sehe ich: filter_breadcrumb: Array [0] – tarponjargon

+0

Haben Sie darüber nachgedacht ein Mixin verwenden? – Lux

Antwort

1

Es gibt setProperties Methode für alle Objekte in Ember.

Bitte nehmen Sie sich einen Blick auf this twiddle und setProperties

+0

Danke ... Ich hatte gehofft, dass das funktionieren würde, aber ich stoße auf das gleiche Problem wie bei einem "Set" innerhalb einer Schleife. Hier ist ein wenig zu zeigen, was ich meine: https://ember-twiddle.com/fb1680bfea201aeb4a0d886aafa3eed5?openFiles=templates.results.hbs%2C&route=%2Fresults%3Fpaging%3D24%26q%3Dfoo%26search_page%3D3%26search_sort%3Drelevance – tarponjargon

+0

Dann ist hier ein Trick, der funktioniert, weil ich die cfg-Eigenschaften direkt im Controller gesetzt habe: https://ember-twiddle.com/b82c69819c5eb51171c6724960f880fe?openFiles=templates.results.hbs%2C&route=%2Fresults%3Ffilter_breadcrumb%3D%255B%2522Home % 2520% 253E% 2520Küche% 2520und% 2520Bar% 2522% 252C% 2522Home% 2520% 253E% 2520Küche% 2520and% 2520Bar% 2522% 255D% 26paging% 3D24% 26q% 3Dfoo% 26search_page% 3D3 – tarponjargon

+0

Von dem was ich Ihnen sagen kann Setzen Sie Objekte nicht wie in diesem Beispiel mit setProperties, nur Strings. Auch wenn die Objekte Werte haben. Es sei denn, ich mache etwas falsch. – tarponjargon

Verwandte Themen