2017-07-15 2 views
0

Ich versuche, es so zu machen, dass jeder neue Auflistungsdatensatz, der erstellt wird, ein Produktattribut hat, dessen Wert ein leeres veränderbares Array ist.Kann CreateRecord mit veränderbarem Array-Attribut nicht erstellen

bekam ich ein Modell in /collection.js definiert

import DS from 'ember-data'; 

export default DS.Model.extend({ 
     name: DS.attr('string'), 
     products: DS.hasMany('product'), 
     rev: DS.attr('string') 
}); 

und eine Route in /view-collections.js. In der Route ist createCollection eine Aktion, die lokal einen Datensatz einer Sammlung erstellt (ich verwende PouchDB, das die Ember Data-Funktionalität verwendet). Ich habe Probleme in der Zeile, in der createRecord aufgerufen wird. Nach einigen Konsolenprotokollen und dem Erstellen einer Sammlung habe ich festgestellt, dass der gespeicherte Sammlungsdatensatz kein Produktattribut enthält, nur name und rev, es wird wie die Zeile "products: []" ignoriert.

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.findAll('collection'); 
    }, 

    titleToken: 'Collections', 

    actions: { 
    createCollection() { 
     let route = this, 
      controller = this.get('controller'); 

     let collection = this.store.createRecord('collection', { 
     name: controller.get('newName'), 
     products: [] 
     }); 
     return collection.save().then(function() { 
     controller.set('newName', ''); 
     //route.transitionTo('products.product.collections', product); 
     }); 
    } 
    } 
}); 

Statt

products: [] 

und

products: Ember.A([]) 

von denen, die beide scheinen, wie sie erhalten ausgeführt tun sie nicht, ich habe auch versucht, alle folgenden

products: DS.MutableArray([]) 
products: DS.ManyArray 
products: DS.MutableArray 
products: DS.ManyArray([]) 

die gib mir Fehler. Schließlich auf meiner Ansicht-collections.hbs

{{#link-to 'products' class="button"}} 
    Back to products 
    {{/link-to}} 
     {{input type="text" class="new-collection" placeholder="New Collection" value=newName insert-newline="createCollection" }} 
     <button class="btn btn-primary btn-sm new-collection-button" {{action "createCollection"}} 
     disabled={{disabled}}>Add</button> 

{{#each model as |collection|}} 
     <div>{{collection.name}} {{collection.products}} {{collection.id}} 
     </div> 
    {{/each}} 

, wo ich alle Informationen aller Sammlungen zu drucken, es tatsächlich ein Objekt für {{collection.products}} findet und druckt die folgenden für jede Sammlung.

<DS.PromiseManyArray:ember498> 

Jede Idee, was dieser letzte Teil ist und wie ich schreiben kann, dass „Produkte: []“, Linie in der Strecke, ist willkommen! Danke

Antwort

0

Ohne Wert für product bereitzustellen, können Sie createRecord für die Sammlung. das wird funktionieren.
Wenn Sie Produktdatensatz einschließen möchten, dann stellen Sie es beim Erstellen des Datensatzes nicht zur Verfügung, Sie können nach dem Erstellen des Datensatzes verwenden.

let collection = this.store.createRecord('collection', { 
     name: controller.get('newName') 
     }); 
//createRecord for product 
let product = this.store.createRecord('product'); 
collection.get('products').pushObject(product); 
Verwandte Themen