2013-05-22 6 views
1

В статье, посвященной DDP, я читал, что все можно опубликовать, но я где-то читал (например, в комментарии Stackoverflow Publish arbitrary data and automatically update HTML), что можно опубликовать только сборники.Могу ли я опубликовать только объект Collections в meteor?

Итак, где же истина? Если мы можем публиковать другие вещи, кроме Коллекций, я бы хотел посмотреть пример, поскольку я пока не могу найти его.

ответ

1

Из документов: http://docs.meteor.com/#meteor_publish

Опубликовать функции могут возвращать Collection.Cursor, в этом случае Метеор опубликует документы, которые курсора. Вы также можете вернуть массив Collection.Cursors, и в этом случае Meteor опубликует все курсоры.

Так что на данный момент вы можете вернуть коллекцию только с помощью курсора (результат Collection.find()).

Чтобы вернуть другие данные, необходимо взломать поток sockjs (для обмена информацией с сервером используется метеор библиотеки сокетов). Помните, что это не гарантирует совместимость с будущими версиями метеора. Sockjs это библиотека используется для метеора для обмена данных между сервером (провод)

от Publish arbitrary data and automatically update HTML *

стороны клиента расслоения плотной

sc = new Meteor._Stream('/sockjs'); 
sc.on('message', function(payload) { 
    var msg = JSON.parse(payload); 
    Session.set('a_random_message', JSON.stringify(msg.data)); 
}); 

Template.hello.greeting = function() { 
    return Session.get('a_random_message'); 
}; 

сторона сервера JS

ss = new Meteor._StreamServer(); 

ss.register(function (socket) { 
    var data = {socket: socket.id, connected: new Date()} 
    var msg = {msg: 'data', data: data}; 

    // Send message to all sockets (which will be set in the Session a_random_message of the client 
    _.each(ss.all_sockets(), function(socket) { 
     socket.send(JSON.stringify(msg)); 
    }); 
}); 
+0

Спасибо. Можно ли сказать, что другой взлом будет создавать коллекцию для любой переменной/объекта, который я хочу опубликовать? – jptsetung

1

Вы также можно посмотреть на Meteor Streams. Смотри ниже.

предположим, что вы добавили метеорные потоки через атмосферу - mrt add streams

sc = new Meteor.Stream('hello'); 

if(Meteor.isServer) { 
    Meteor.setInterval(function() { 
    sc.emit('a_random_message', 'Random Message: ' + Random.id()); 
    }, 2000); 

    Meteor.permissions.read(function() { return true }); 
} 

if(Meteor.isClient) { 
    sc.on('a_random_message', function(message) { 
    Session.set('a_random_message', message); 
    }); 

    Template.hello.greeting = function() { 
    return Session.get('a_random_message'); 
    }; 
} 
Смежные вопросы