2013-05-24 21 views
7

Zaczynam pracować z Meteorem i zaczynam od pierwszego wydania. Próbuję wstawić element do mojej kolekcji. Dostaję poniższy błąd dziennika konsoli. Czy ktoś może pomóc noobowi Meteorów?Wystąpił błąd podczas wprowadzania do kolekcji Meteorów

insert nie powiodło się: Metoda nie znaleziono

Jest to linia, która powoduje błąd:

Videos.insert({name: el.value}); 

Mój plik js:

var Videos = new Meteor.Collection("videos"); 

if (Meteor.isClient) { 
    Template.videoList.video = function() { 
    return Videos.find(); 
    } 

    Template.videoForm.events({ 
    'click button': function(e, t){ 
     var el = t.find("#name"); 
     Videos.insert({name: el.value}); 
     el.value = ""; 
    } 
    }); 
} 
+1

czy masz 'var Videos = new Meteor.Collection (" videos ")' dostępne również po stronie serwera? – Akshat

+0

Tak, to było to. Moja kolekcja była tylko na kliencie. Dzięki! – zero

+0

@Tarang Powinieneś opublikować swój komentarz jako odpowiedź, aby zero mogło go zaakceptować. – Boggin

Odpowiedz

12

Podczas próby Video.insert. Meteor próbuje wstawić zarówno na kliencie, jak i na serwerze. Meteor projektuje to w ten sposób, aby natychmiast odzwierciedlić zmianę na kliencie (Kompensacja czasu).

Gdy twoja kolekcja wideo nie jest zdefiniowana na serwerze (nie w meteor.isServer wrap lub pliku, który może uzyskać dostęp przez serwer). Spowoduje to błąd, który napotkasz.

Jeśli chcesz wstawić tylko do klienta. Możesz uzyskać do niego dostęp przez _collection. Tak więc instrukcja wstawiania będzie miała postać Video._collection.insert (wartości);

można znaleźć więcej informacji o tej obsadzie ekran: http://www.eventedmind.com/feed/meteor-anatomy-of-a-collection-insert

+0

czy to zawsze było takie? Mam na myśli, że Collection.insert wypróbować zarówno wstawiania serwera i klienta, nawet jeśli jest to kolekcja po stronie klienta? – Mascarpone

+1

@Mascarpone Jeśli kolekcja jest tylko po stronie klienta. Nie wywoła połączenia z serwerem – Bozhao

6

Aby utworzyć lokalną-Kolekcja:

MyLocalCollection = new Collection(null);

(doc odniesienia here)

O "_collection":

_collection to nieudokumentowana własność, która zachowuje się dziwnie w wielu przypadkach. Możesz go nie używać.

O manipulując tylko lokalnej pamięci podręcznej kolekcji klient-serwer:

Nie ma sposobu, aby to zrobić bezpośrednio. Jednak bardzo proste jest utworzenie dynamicznego lokalnego zwierciadła istniejącej kolekcji (z mojego doświadczenia wynika, że ​​jest to sposób na złożony interfejs użytkownika). Zobacz this post.

Powiązane problemy