2014-12-05 3 views
0

Попытка понять CRUD в Meteor & имеет фундаментальную проблему, которая заключается в том, что когда я удаляю автоматическое опубликование и использование явных pub/sub, вставки коллекции из клиентского обновления, а не клиентской коллекцией.Meteor.js: Collection.insert работает на сервере, но не на клиенте

Результатом является то, что, хотя значения полей получены правильно, вставка не выполняется на стороне клиента. На стороне сервера запись вставлена ​​правильно.

$ метеор удалить autopublish

Создать HTML-файл формы (она действует и функционирует, как и ожидалось), то:

/server/publish.js Файл:

Meteor.publish('todos'), function() { 
    return Todos.find(); 
} 

Файл /lib/collections.js:

Todos = new Mongo.Collection('todos'); 

/client/subscribe.js Файл:

Meteor.subscribe('todos'); 

/client/todos.js Файл:

Template.todosList.helpers({ 
    todosList: function() { 
     return Todos.find(); 
    }, 
    }); 

Template.todoNew.events({ 
    'submit form': function(event) { 
     event.preventDefault(); 
     var theRecord = { 
      description: $(event.target).find('[id=description]').val(), 
      priority: $(event.target).find('[id=priority]').val() 
     }; 
     // Display correct field values, so form data is OK 
     console.log('Attemping to insert: ' + theRecord.description); 
     Todos.insert(theRecord, function(error) { 
      // This error always occurs 
      console.log('error inserting: ' + theRecord.description); 
     }); 
    } 
}); 

ответ

1

Для того, чтобы писать в коллекции от клиента вы потребуется правило allow. Поместите что-то вроде этого под /server:

Meteor.publish('todos', function() { 
    return Todos.find(); 
}); 

Todos.allow({ 
    insert: function(userId, doc) { 
    // a todo must have a description and a priority 
    return (doc.description && doc.priority); 
    } 
}); 
+0

Большое спасибо - я все еще не могу заставить его работать. Я пробовал пару разных версий, и они приводят к ошибкам во время выполнения: ** Исключение при вызове метода/todos/insert 'TypeError: Невозможно прочитать свойство' description 'null ** Вот мои попытки: * * Файл /server/publish.hs:** ' Todos.allow ({ вставка: функция (идентификатор пользователя, DOC) { возврата (doc.description && doc.priority); } }); ' А: ** Файл /server/publish.hs:** ' Todos.allow ({ вставки: функция (theRecord) { возвращение (theRecord.description && theRecord.priority); } }); – tomcam

+0

@tomcam, первым параметром является идентификатор пользователя (или «null», если пользователь не подписан), второй параметр сохраняет документ. –

+0

Мысль, @ peppe-l-g, и спасибо за ответ! Отсюда моя вторая версия, которая также не работает. Я специально удалил autopublish, в то время как ** не ** добавление учетных записей-ui. Мне кажется, что pub/sub технически не имеет никакого отношения к учетным записям, хотя, конечно, практически говоря, это должно быть в любом полезном приложении. Я не прав? Должен ли я всегда добавлять учетные записи, когда я удаляю autopublish? – tomcam

Смежные вопросы