无法使用可变数组属性createRecord

时间:2017-07-15 00:35:28

标签: javascript ember.js ember-data pouchdb

我正在努力使每个创建的新集合记录都有一个products属性,其值是一个空的可变数组。

我在/collection.js中定义了一个模型

import DS from 'ember-data';

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

和/view-collections.js中的路由。在路由中,createCollection是一个在本地创建集合记录的操作(我使用的PouchDB使用Ember Data功能)。我在调用createRecord的行上遇到了麻烦。在一些控制台记录并自己创建一个集合之后,我意识到保存的集合记录不包含产品属性,只是名称和转换,就像“products:[]”这一行被忽略。

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);
      });
    }
  }
});

而不是

products: []

products: Ember.A([])

其中,两者似乎都没有被执行,我也尝试了以下所有

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

给我错误。最后,在我的view-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}}

我打印所有集合的所有信息,它实际上找到了{{collection.products}}的对象,并为每个集合打印以下内容。

<DS.PromiseManyArray:ember498>

对于这个最后一部分是什么以及如何写出“产品:[]”的任何想法,在路线中都行,欢迎!感谢

1 个答案:

答案 0 :(得分:0)

如果不为product提供价值,您可以createRecord进行收集。这会奏效。
如果您想要包含产品记录,然后在创建记录时不提供产品记录,则可以在创建记录后使用pushObject

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