2016-03-18 4 views
0

Предположим, вам будет предложено выбрать категорию пользователей, а затем обновить подкатегорию. Решение было рекомендовано кем-то другим, но я не могу заставить его работать. Когда я выбираю категорию, подкатегория не обновляется. Может ли кто-нибудь сообщить мне, что мне не хватает.Выберите категорию, не обновляющую подкатегорию

Путь: category.js

<template name="category"> 
    {{#autoForm collection="Meteor.users" id="categoryForm" doc=currentUser type="update"}} 
     {{> afQuickField name='profile.categories'}} 
    {{/autoForm}} 
</template> 

Путь: Schema.js

var fruitArr = ['apple', 'banana']; 
var vegetablesArr = ['carrot', 'broccoli']; 

Schema.Category = new SimpleSchema({ 
    category: { 
     type: String, 
     label: "Category", 
     allowedValues: ['fruit', 'vegetables'] 
    }, 
    subcategory: { 
     type: String, 
     label: "Subcategory", 
     allowedValues: _.union(fruitArr, vegetablesArr), 
     autoform: { 
      options: function() { 
       let category = AutoForm.getFieldValue("category"); 
       if (!category) return [{label: "Please select a category first", value: ""}]; 

       if (category === "fruit") return _.map(fruitArr, (v, i) => ({ 
        label: "Fruit " + (i + 1) + ": " + v, 
        value: v 
       })); 
       else return _.map(vegetablesArr, (v, i) => ({label: "Vegetables " + (i + 1) + ": " + v, value: v})); 
      } 
     } 
    } 
}); 

Schema.UserProfile = new SimpleSchema({ 
    categories: { 
     type: Schema.Category, 
     optional: true, 
    } 
}); 

ответ

2

При вызове AutoForm.getFormValues('categoryForm'); в журнале консоли браузера, следующий результат будет возвращен:

{ 
    "insertDoc":{ 
     "profile":{ 
     "categories":{ 
      "category":"fruit" 
     } 
     } 
    }, 
    "updateDoc":{ 
     "$set":{ 
     "profile.categories.category":"fruit" 
     }, 
     "$unset":{ 
     "profile.categories.subcategory":"" 
     } 
    } 
} 

Как вы можете см. выше, поле схемы subcategory указывается как profile.categories.subcategory. Поэтому поле subcategory не будет обновляться, потому что AutoForm.getFieldValue("category"); возвращает undefined.

Вы можете исправить эту ошибку, изменив

let category = AutoForm.getFieldValue("category"); 

в

let category = AutoForm.getFieldValue("profile.categories.category"); 

внутри options функции в области subcategory схемы.

+1

Легенда! Это работает. – bp123