Я продолжаю получать это сообщение об ошибке, когда нажимаю кнопку отправки. Я пытаюсь создать приложение для обмена мгновенными сообщениями, в котором онлайн-пользователи могут общаться один на один. Я новичок, и я был бы очень признателен за любую помощь. Вот мое сообщение об ошибке, оно снова появляется в консоли, когда я нажимаю кнопку «Отправить».
Исключение из функции пересчета Tracker: meteor.js:862 Ошибка: {{#each}} в настоящее время принимает только массивы, курсоры или ложные значения. в badSequenceError (observe-sequence.js:148) в наблюдать-sequence.js:113 в Object.Tracker.nonreactive (tracker.js:597) в наблюдать-sequence.js:90 в Tracker.Computation._compute (tracker.js :331) в Tracker.Computation._recompute (tracker.js:350) в Object.Tracker._runFlush (tracker.js:489) в onGlobalMessage (meteor.js:347)
Вот мой HTML
<template name="chat_page">
<h2>Type in the box below to send a message!</h2>
<div class="row">
<div class="col-md-12">
<div class="well well-lg">
{{#each messages}}
{{> chat_message}}
{{/each}}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<form class="js-send-chat">
<input class="input" type="text" name="chat" placeholder="type a message here...">
<input type="submit" value="Send">
</form>
</div>
</div>
</template>
<!-- simple template that displays a message -->
<template name="chat_message">
<div class = "container">
<div class = "row">
<img src="/{{profile.avatar}}" class="avatar_img">
{{username}} said: {{text}}
</div>
</div>
<br>
</template>
Сторона клиента
Template.chat_page.helpers({
messages: function () {
var chat = Chats.findOne({ _id: Session.get("chatId") });
return chat.messages;
},
other_user: function () {
return "";
}
});
Template.chat_page.events({
'submit .js-send-chat': function (event) {
console.log(event);
event.preventDefault();
var chat = Chats.findOne({ _id: Session.get("chatId") });
if (chat) {
var msgs = chat.messages;
if (! msgs) {
msgs = [];
}
msgs.push({ text: event.target.chat.value });
event.target.chat.value = "";
chat.messages = msgs;
Chats.update({ _id: chat._id }, { $set : { messages: chat } });
Meteor.call("sendMessage", chat);
}
}
});
Части серверной части
Meteor.publish("chats", function () {
return Chats.find();
});
Meteor.publish("userStatus", function () {
return Meteor.users.find({ "status.online": true });
});
Meteor.publish("userData", function () {
if (this.userId) {
return Meteor.users.find({ _id: this.userId },{ fields: { 'other': 1, 'things': 1 } });
} else {
this.ready();
}
return Meteor.users.find({ "status.online": true });
});
Meteor.publish("users", function () {
return Meteor.users.find({ "status.online": true });
});
Chats.allow({
insert: function () { return true; },
update: function () { return true; },
remove: function () { return true; }
});
Meteor.methods({
sendMessage: function (chat) {
Chats.insert({
chat: chat,
createdAt: new Date(),
username: Meteor.user().profile.username,
avatar: Meteor.user().profile.avatar,
});
}
});
messages
? - person umesh   schedule 12.02.2016{{#each}}
принимает только массивы, курсоры или ложные значения. Посколькуmessages
— это поле в документе чата, вы сможете использовать{{#each}}
в сообщениях, если его значение является либо массивом, либо ложным значением. - person umesh   schedule 12.02.2016chat_message
приведет к ошибке, о которой вы сообщили. Ошибка конкретно в строке{{#each messages}}
, так как она не получает действительного значения. - person umesh   schedule 12.02.2016