Как получить массив из массива в Метеоре. js - PullRequest
1 голос
/ 29 марта 2020

все. Я хотел бы, чтобы учащиеся, которые записали предмет, отображались в таблице, когда этот предмет был выбран в раскрывающемся списке. Идентификатор этих студентов хранится в массиве. Проблема в том, что этот массив идентификаторов, извлеченный из документа, выглядит довольно странно. кажется, что есть массив в массиве. Как это показано в консоли: показано в консоли

 {enrollment: Array(2)}
     enrollment: Array(2)
     0: "b1602231"   
     1: "B1560124"   
     length: 2 
     __proto__: Array(0)
     __proto__: Object

И это выдало ошибку: Исключение в помощнике по шаблону: Ошибка: $ in нуждается в массиве

Так как я мог решить это? Я был бы очень признателен, если кто-то может дать мне некоторое представление.

Ниже приведен обработчик событий и помощник.

Template.subject.events({
  ‘change #dropdown’: function(event, template) {
    var selectedValue = $(event.target).val();
    var array = subject.findOne( { subjectCode:selectedValue }, { fields:{ _id:0, enrollment:1 } } );
    Session.set(‘studentEnrolled’,array);
  }
});

Template.student.helpers({
  student: function() {
    var listOfStudent = Session.get( ‘studentEnrolled’ );
    return student.find( { studentID: { $in:listOfStudent } } );
  }
});

// HTML

<template name="student">
        {{#each student}}
        <tr>
          <td>{{name}}</td>
        </tr>
        {{/each}}
</template>

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Копирование моего ответа с форумов:

Прежде всего, вы берете весь предметный документ (а после первого ответа, оборачиваете этот массив в другой массив) здесь:

Session.set('studentEnrolled',[array]);

Что означает, что при поиске здесь:

return student.find({studentID:{$in:listOfStudent}});

Вы передаете массив с документом вместо массива зачислений.

Что вы хотите сделать, это сохранить зачисления в сеансе:

Session.set('studentEnrolled', array.enrollments);

Я бы также рекомендовал переименовать переменную array, поскольку это не массив, и это, вероятно, способствовало вашей путанице

1 голос
/ 29 марта 2020

Найти get one records из данных. Вы можете конвертировать в массив, используя [data]

var array = subject.findOne({subjectCode:selectedValue}, {fields:{_id:0, enrollment:1}});
Session.set(‘studentEnrolled’,[array]);
}

// Для asyn c update Подробнее: https://blog.meteor.com/using-promises-and-async-await-in-meteor-8f6f4a04f998

Template.hello.onCreated(function helloOnCreated() {
  this.list = new ReactiveVar([]);
  Meteor.call('getHobbits', (error, result) => {
    this.list.set(result);
  });
});

Template.hello.helpers({
  hobbits() {
    return Template.instance().list.get();
  },
});
...