2016-04-06 18 views
0

nennen meine Vorlage wie diese {{> list_items}} und es aus irgendeinem Grunde nichtMeteor nicht geladen Daten

dies ist der Template-Code

<template name="list_items"> 
    {{#each items}} 
    <div class="col-sm-4 col-lg-4 col-md-4"> 
     <div class="thumbnail"> 
     <img src="{{previewImage}}" alt=""> 
     <div class="caption"> 
      <h4 class="pull-right">{{price}}</h4> 
      <h4><a href="#">{{title}}</a></h4> 
      <p>{{description}}</p> 
     </div> 
     </div> 
    </div> 
    {{/each}} 
</template> 

und items ist eine Funktion in der Vorlage Helfer funktioniert, die zurückgibt die Dokumente in meiner Sammlung, hier ist ihr Code:

Template.list_items.helpers({ 
    items: function(){ 
    return Items.find({}); 
    } 
}); 

Dies ist meine Sammlung Items erlauben Regeln

Items.allow({ 
    insert: function (userId, doc) { 
    // the user must be logged in, and the document must be owned by the user 
    return true; 
    }, 
    update: function (userId, doc, fields, modifier) { 
    // can only change your own documents 
    return true; 
    }, 
    remove: function (userId, doc) { 
    // can only remove your own documents 
    return true; 
    } 
}); 

Und Sammlung in "lib" Ordner, so dass ich es von der Client-Seite verwenden kann.

Als ich versuchte, Items.find() zu verwenden. Fetch() i eine leere Sammlung bekommen [] Auch wenn ich die Sammlung mit einem Dokument in ihm arbeiten

Warum es nicht haben? Gibt es ein benötigtes Paket, das zuerst hinzugefügt werden muss?

+0

Haben Sie Dokumente in Ihrer 'Items' Sammlung? Veröffentlichen Sie diese vom Server auf dem Client _oder_ haben Sie das Paket _autopublish_ installiert? (Neue Projekte enthalten es standardmäßig). Versuchen Sie 'Items.find(). Fetch()' in Ihre Konsole einzugeben und sehen Sie, was zurückkommt. –

+0

@MichelFloyd Ich habe eine leere Sammlung [], ich entfernte Autopublish und die Sammlung ist in Lib-Verzeichnis, so dass ich es auch von der Client-Seite zugreifen kann, und ich Items.allow Regeln, änderte ich meine Antwort und enthalten sie – user3420180

+0

Sie müssen die Sammlung veröffentlichen (von/server) und diese Sammlung (/ client) abonnieren. FYI - Regeln teilen Meteor mit, welche Änderungen vom Kunden möglich sind, sie wirken sich nicht auf Pub-Sub aus. –

Antwort

1

löste es, indem sie veröffentlichen und

im Server

Meteor.publish('items-all', function publishFunction() { 
    return Items.find({}); 
}) 

im Client

Meteor.subscribe('items-all'); 
0

Diese Sie alle Daten auf Client side.Items finden wird nicht zulassen, abonnieren. find ({}) gibt leere Dokumente zurück.

Items.allow({ 
    insert: function (userId, doc) { 
    // the user must be logged in, and the document must be owned by the user 
    return true; 
    }, 
    update: function (userId, doc, fields, modifier) { 
    // can only change your own documents 
    return true; 
    }, 
    remove: function (userId, doc) { 
    // can only remove your own documents 
    return true; 
    } 
}); 

Wenn Sie Items.find ({}) erlauben möchten, erlauben Sie alle Routen/Vorlagen. Sie können die Daten auf Server-Seite wie veröffentlichen:

Meteor.publish('all-Items', function(){ 
    return Items.find({}); 
}) 

Und auf der Client-Seite können Sie die all-Artikel veröffentlichen auf der Innenseite der Meteor.startup wie diese abonnieren:

Meteor.startup(function() { 
    Meteor.subscribe('all-Items'); 
} 

Dann können Sie zugreifen Items.find ({}) auf jeder einzelnen Route und das gibt alle Dokumente reaktiv zurück.

Vergessen Sie nicht, die Funktion fetch hinzuzufügen, um sie auf der Konsole zu sehen: Items.find ({}). Fetch(), Es wird ein Array Ihrer Dokumente zurückgegeben.