Используя Meteor, я пытаюсь понять, когда использовать серверную сторону Meteor.methods()
, сохраняя при этом мгновенные обновления пользовательского интерфейса.
Из Andrew Scala вводное учебное пособие, он утверждает, что Meteor.methods()
следует использовать, когда вы хотите обновлять и изменять ваши документы базы данных:
Идея состоит в том, что вы определяете все функции на сервере, которые делают опасные вещи, такие как изменение и обновление данных, а затем позволить клиенту вызывать эти функции и получать возвращаемые значения, такие как обычные функции. клиент никогда не видит реализацию и лично не модифицирует данные. Сервер выполняет всю работу.
И после этого совета я реализовал это в своем коде:
Серверная сторона:
Meteor.methods({
addMovie: function(data) {
var movie = Movies.insert({name: data});
return movie;
},
...
Клиентская сторона:
Template.movies.events = ({
'click #add-movie': function(e) {
var name = document.getElementById('movie-name').value;
Meteor.call('addMovie', name);
return false;
},
...
Это работает, но оно медленное. Пользовательский интерфейс не обновляется мгновенно, как если бы вы набрали Movies.insert()
на стороне клиента. docs показывают, что для исправления проблемы вы можете создавать заглушки на стороне клиента:
Методы вызова на клиенте определяют функции заглушки, связанные с серверные методы с тем же именем. Вам не нужно определять заглушку для ваш метод, если вы этого не хотите. В этом случае вызовы методов просто например, удаленные вызовы процедур в других системах, и вам придется подождать для результатов с сервера.
Но какими должны быть эти заглушки? Должен ли он в основном выглядеть так же, как на стороне сервера? Если да, то какой смысл? Я ищу более подробное объяснение использования и назначения Meteor.methods()
, точки/использования заглушек и их реализации.
EDIT: Дэвид Гринспен помог уточнить использование Meteor.methods() и заглушек на meteor-talk.