0

У меня есть проблема с сборкой2 с отношениями и автоформами. Я пытаюсь реализовать соотношение 1: n, где каждый объект имеет ровно 1 objectType, в то время как для каждого объекта objectType можно ссылаться на несколько объектов.autoform не будет отображать поле выбора опций

Моя схема выглядит следующим образом:

// register collections 
Objects = new Mongo.Collection('objects'); 
ObjectTypes = new Mongo.Collection('objectTypes'); 

// define schema 
var Schemas = {}; 

Schemas.ObjectType = new SimpleSchema({ // object type schema 
    name: { 
     type: String 
    } 
}); 

Schemas.Object = new SimpleSchema({ // object schema 
    type: { 
     type: ObjectTypes.Schema, 
     optional: true 
    }, 
    title: { 
     type: String 
    } 
}); 

// attach schemas 
ObjectTypes.attachSchema(Schemas.ObjectType); 
Objects.attachSchema(Schemas.Object); 

Мой AutoForm выглядит следующим образом:

{{> quickForm collection="Objects" id="insertTestForm" type="insert"}} 

Я на самом деле было бы ожидать выбора поля параметров для моего атрибута типа, однако, появляется ввод текста. Кто-нибудь знает почему?

Согласно документации [1], она должна быть выберите вариант поля:

If you use a field that has a type that is a Mongo.Collection instance, autoform will automatically provide select options based on _id and name fields from the related Mongo.Collection. You may override with your own options to use a field other than name or to show a limited subset of all documents. You can also use allowedValues to limit which _ids should be shown in the options list. 

[1] https://github.com/aldeed/meteor-collection2/blob/master/RELATIONSHIPS.md#user-content-autoform

EDIT Если я использую

type: ObjectTypes, 

вместо от

type: ObjectTypes.Schema, 

мое приложение падает, метание следующее сообщение об ошибке:

Your app is crashing. Here's the latest log. 

/Users/XXX/.meteor/packages/meteor-tool/.1.1.3.ik16id++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245 
         throw(ex); 
          ^
RangeError: Maximum call stack size exceeded 
Exited with code: 8 
Your application is crashing. Waiting for file change. 

ответ

0

Ваш тип не «экземпляр Mongo.Collection», как сказано в документации; это схема. Попробуйте это:

Schemas.Object = new SimpleSchema({ 
    type: { 
     type: ObjectTypes, 
     optional: true 
    }, 
    ... 
+0

выдает ошибку, см. Мой обновленный вопрос – Ronin

0

Поскольку никто не мог помочь мне решить этот случай, я придумал альтернативное решение:

// register collections 
Objects = new Mongo.Collection('objects'); 
ObjectTypes = new Mongo.Collection('objectTypes'); 

// define schema 
var Schemas = {}; 

Schemas.Object = new SimpleSchema({ // object schema 
    type: { 
     type: String, 
     optional: true, 
     autoform: { 
      return ObjectTypes.find().map(function(c) { 
       return{label: c.name, value: c._id} 
      }); 
     } 
    }, 
    // ... 
}); 

// attach schema 
Objects.attachSchema(Schemas.Object); 

Как вы можете видеть, я вручную картировать атрибуты мне нужно из objectTypes коллекции в атрибут autoform. Поскольку он возвращает массив объектов, содержащий атрибуты label и value, автоформат автоматически отобразит выбор.

 Смежные вопросы

  • Нет связанных вопросов^_^