2015-04-20 1 views
3

Я - новичок в Метеор. Я пытаюсь создать доказательство концепции с использованием Meteor, где обновления для Mongo oplog отображаются на экране браузера.Meteor.js - Как наблюдать за изменениями() с клиентской стороны

В настоящее время я пытаюсь адаптировать простую информацию для этой цели. Я получил обновления журнала на сервере, но не знаю, как перенести это на экран браузера клиента?

if(Meteor.isClient) { 
    // counter starts at 0 
    Session.setDefault('counter', 0); 

    Template.hello.helpers({ 
     counter: function() { 
      return Session.get('counter'); 
     } 
    }); 

    Template.hello.events({ 
     'click button': function() { 
      // increment the counter when button is clicked 
      Session.set('counter', Session.get('counter') + 1); 
     } 
    }); 
} 

if(Meteor.isServer) { 
    Meteor.startup(function() { 
     // code to run on server at startup 
     var Test = new Mongo.Collection('test'); 
     var query = Test.find({}); 
     var init = true; 
     query.observeChanges({ 
      added: function(id, fields) { 
       if(!init) 
        console.log('doc inserted'); 
      }, 
      changed: function(id, fields) { 
       console.log('doc updated'); 
      }, 
      removed: function() { 
       console.log('doc removed'); 
      } 
     }); 
     init = false; 
    }); 
} 

ответ

4

Определить коллекцию для обоих - сервер и клиент:

//collection Test for client and server 
var Test = new Mongo.Collection('test'); 
if (Meteor.isClient) { 
    //subscribe for collection test 
    Meteor.subscribe('test'); 
    Template.hello.helpers({ 
    test: function() { 
     var query = Test.find(); 
     query.observeChanges({ 
     added: function(id, fields) { 
      console.log('doc inserted'); 
     }, 
     changed: function(id, fields) { 
      console.log('doc updated'); 
     }, 
     removed: function() { 
      console.log('doc removed'); 
     } 
     }); 
     return query; 
    } 
    }); 
} 

if (Meteor.isServer) { 
    Meteor.publish('test', function() { 
    return Test.find(); 
    }); 
} 

Для более сложных приложений вы должны структурировать ваше приложение в несколько каталогов и файлов. Читайте об этом в Meteor docs.

+0

Но я слышал, что это было небезопасно. – Wes

+0

Я предполагаю, что безопасный способ - опубликовать и подписаться, хотя я не уверен, как это будет работать здесь. – Wes

+0

Убедитесь, что вы должны использовать публикацию/подписку. В вашей клиентской коллекции представлены только данные, которые вы публикуете на своем сервере. Прочтите это и попробуйте: https://www.discovermeteor.com/blog/understanding-meteor-publications-and-subscriptions/ –