Update Set - Weitere Informationen unterEmber: ein Wert zurückgeben oder ein Modell Eigentum von Ember Versprechen
Wenn ich ein Versprechen habe, ist es möglich, einen Wert von ihr zurück?
Wenn ich versuche, das itemData-Array zurückzugeben, nachdem das Versprechen aufgelöst wurde, werde ich undefiniert.
Alternativ (und vorzugsweise) Ich möchte in der Lage sein, ein Modell Eigenschaft zu setzen, wenn das Versprechen gelöst hat:
// component code
itemData:null,
init() {
let model = this.get('data');
model.data.get('products').then(relatedItems => {
relatedItems.forEach(function(item,index) {
this.set('itemData',item);
});
},reject => {
console.log('error');
});
}
Der Grund für all dies ist, dass ich die Produkt-Elemente sortieren muß die Ich kann nur über das Versprechen (in diesem Beispiel) zugreifen. Nachdem die itemData Eigenschaft Ich beabsichtige, wie etwas zu tun:
sortedItems:computed.sort('itemData','sortProperties'),
sortProperties:['name:desc']
Weitere Informationen:
In meinem Produkt Route, product.items.item habe ich eine Paginierung Komponente
{{pagination-item-trad data=model}}
Das Modell hook in der Route product.items.item ist
model(params) {
let itemModel = this.store.findRecord('product',params.id);
let mainModel = this.modelFor('product.items');
return Ember.RSVP.hash({
data:itemModel,
mainData:mainModel
});
}
Das mainModel enthält das Kategoriemodell für diesen bestimmten Produktartikel.
Da das Produktkategoriemodell eine Viele-zu-Viele-Beziehung zu Produkten hat, muss ich mithilfe einer Zusage auf die Produktdaten in meiner Komponente zugreifen, was kein Problem war, bis ich die Produktdaten sortieren musste. Ich versuche, die Produktinformationen aus dem Versprechen (itemData unten) zu erhalten und dann in der berechneten Eigenschaft zu verwenden. Also die Frage ist, wie kann ich die Daten aus dem Versprechen für die Verwendung an anderer Stelle im Code extrahieren? Gibt es einen besseren Weg, dies zu erreichen? Ich hoffe, das ist klarer!
sortedItems:computed.sort('itemData','sortProperties'),
sortProperties:['name:desc']
Die Komponente im Detail:
import Ember from 'ember';
const {computed} = Ember;
export default Ember.Component.extend({
itemData:null, // i would like to set this within the promise
sortedItems:computed.sort('itemData','sortProperties'),
sortProperties:['name:desc'],
init() {
let allData = this.get('data');
let mainModel = allData.mainData;
var self = this;
let itemData = [];
mainModel.data.get('products').then(relatedItems => {
relatedItems.forEach(function(item,index) {
console.log(item.get('name')); // prints Product 1 etc etc
itemData.pushObject(item);
});
self.set('itemData',itemData); // I can't do this
},reject => {
console.log('error '+reject);
});
}
// rest of code omitted for brevity
});
Es gibt einen Tippfehler in Zeile 5, fehlende "'": 'let model = this.get (' data ^);' – Pavol
Können Sie eine berechnete Eigenschaft abhängig vom Modell festlegen? 'sortiert: Ember.computed ('data.model.products', function() { Rückgabe this.get ('data.model.products'). Filter (...); });' – Pavol
Es wird nicht arbeiten, da er Versprechungen verwendet. –