6

Mam następujące SimpleSchema gdzie próbuję dodać niestandardowe sprawdzanie poprawności do sprawdzania poprawności przed wprowadzaniem zduplikowanej nazwy klienta, ale zawsze gdy próbuję zapisać nowego klienta otrzymuję błąd:Meteor za pomocą namedContext do addInvalidKeys do formularza AutoForm zwracającego błąd

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

Czy ktoś może mi powiedzieć, co robię źle/brakuje tutaj, aby potwierdzić nazwę klienta przed zduplikowanymi rekordami? Dzięki

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

mógłbyś dostarczyć repozytorium? –

Odpowiedz

5

Sprawdź collection2 code do pobierania schematu dołączonego do kolekcji:

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

Ten tajemniczy homonimem _c2 (jednej z dwóch twardych rzeczy w programowaniu ...) przychodzi from attachSchema:

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

co oznacza, że ​​zapomnieli attachSchema lub skrzypce z własnością twojej kolekcji.

Aby rozwiązać:

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