2015-03-17 1 views
0

У меня есть schemas, чтобы я мог иметь массив комплексных наборов ввода через autoform. Что-то вроде:Boolean во вложенной схеме, вызывающей требуемое состояние

address = { 
    street:{ 
    type: String 
    }, 
    city: { 
    type: String 
    }, 
    active_address: { 
    type: Boolean, 
    optional: true 
    }, 
    ... 
} 

people: { 
    name:{ 
    type: String 
    }, 

    address:{ 
    type: [address], 
    optional: true, 
    defaultValue: [] 
    } 
} 

Таким образом, добавление адреса не является обязательным, но если добавить адрес все поля адреса не требуется.

Попытка отправить форму порождает требуемую ошибку для каждого поля под «адресом», за исключением Boolean, даже если флажок не установлен.

Для справки, я создаю форму как таковую:

{{#autoForm collection="people" id=formId type="insert" doc=getDocument autosave=true template="autoupdate"}}  
    {{> afQuickField name='name' template="autoupdate" placeholder="schemaLabel"}} 
    {{> afQuickField name='address' template="autoupdate"}} 
    ... 
{{/autoForm}} 

Я использую шаблоны форм очень сильно на основе шаблонов bootstrap3 форм, которые приходят с AutoForm.

Пробовал

пытался добавить крючок так:

formToDoc:function(doc, ss, formId){ 
    for (var i = 0, l = doc.address.length; i < l; ++i){ 
     if (!doc.address[i].active_address){ 
     delete doc.address[i].active_address; 
     }; 
    } 
    return doc; 
    } 

который решает проблему представить, но до сих пор вставляет массив полный пустых строк "" для других значений. Это приводит к тому, что форма обновления переходит в режим haywire, аналогично тому, что показано в моем other question.

Проблема в том, что массив не пуст, но вместо этого имеет объект пустых значений. Вероятно, я мог бы пробежать все значения в форме и удалять все поля, но это очень опасно и дорого.

ответ

0

В прошлой оценке я был некорректен. Я удалил defaultValue: [] из поля адреса в схеме лица. Использование этого кода в кодексе formToDoc устраняет проблему:

for (var i = 0, l = doc.address.length; i < l; ++i){ 
    if (!doc.address[i].active_address){ 
    doc.address[i].active_address = null; 
    }   
} 
return doc;