6

У меня есть следующая SimpleSchema, где я пытаюсь добавить пользовательскую проверку, чтобы проверить наличие двойного имени клиента, но всякий раз, когда я пытаюсь сохранить нового клиента, я получаю ошибку:Meteor использует namedContext для addInvalidKeys для формы AutoForm, возвращающей ошибку

Exception in delivering result of invoking 'adminCheckNewCustomerName': TypeError: Cannot read property 'namedContext' of null

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно/отсутствует здесь, чтобы подтвердить имя клиента в отношении дубликатов записей? Благодарности

schema.js:

AdminSection.schemas.customer = new SimpleSchema({ 
    CustomerName: { 
     type: String, 
     label: "Customer Name", 
     unique: true, 
     custom: function() { 
      if (Meteor.isClient && this.isSet) { 
       Meteor.call("adminCheckNewCustomerName", this.value, function(error, result) { 
        if (result) { 
         Customer.simpleSchema().namedContext("newCustomerForm").addInvalidKeys([{ 
          name: "CustomerName", 
          type: "notUnique" 
         }]); 
        } 
       }); 
      } 
     } 
    } 
}); 

UI.registerHelper('AdminSchemas', function() { 
    return AdminSection.schemas; 
}); 

form.html:

{{#autoForm id="newCustomerForm" schema=AdminSchemas.customer validation="submit" type="method" meteormethod="adminNewCustomer"}} 
    {{>afQuickField name="CustomerName"}} 
    <button type="submit" class="btn btn-primary">Save Customer</button> 
{{/autoForm}} 

collections.js:

this.Customer = new Mongo.Collection("customers"); 
+0

Могли бы вы предоставить хранилище? –

ответ

5

Проверить collection2 code для извлечения схемы, прикрепленной к коллекции:

_.each([Mongo.Collection, LocalCollection], function (obj) { 
    obj.prototype.simpleSchema = function() { 
    var self = this; 
    return self._c2 ? self._c2._simpleSchema : null; 
    }; 
}); 

Это загадочное _c2 одноименного (один из двух жестких вещей в программировании ...) приходит from attachSchema:

self._c2 = self._c2 || {}; 
//After having merged the schema with the previous one if necessary 
self._c2._simpleSchema = ss; 

Это означает, что вы забыли attachSchema или украшенное имущество вашей коллекции.

Для решения:

Customer.attachSchema(AdminSchemas.customer); 
//Also unless this collection stores only one customer its variable name should be plural