如何从 Meteor.js 中的数组获取数组
How to get an array from an array in Meteor.js
各位。当在下拉列表中选择该科目时,我希望注册该科目的学生显示在 table 中。这些学生的 ID 存储在一个数组中。问题是从文档中检索到的这个 ID 数组看起来有点奇怪。好像数组中有一个数组。
就像控制台中显示的这样:
shown in console
{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>
从数据中查找得到one records
。你可以使用 [data]
在数组中转换
var array = subject.findOne({subjectCode:selectedValue}, {fields:{_id:0, enrollment:1}});
Session.set(‘studentEnrolled’,[array]);
}
// 用于异步更新
更多: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();
},
});
正在从论坛复制我的答案:
首先,您要获取整个主题文档(并在第一个答案之后,将该数组包装到另一个数组中):
Session.set('studentEnrolled',[array]);
这意味着当您在这里搜索时:
return student.find({studentID:{$in:listOfStudent}});
您正在传递一个包含文档的数组,而不是 enrollments 数组。
您要做的是将注册存储在会话中:
Session.set('studentEnrolled', array.enrollments);
我还建议重命名变量 array
,因为它不是数组,这可能会导致您感到困惑
各位。当在下拉列表中选择该科目时,我希望注册该科目的学生显示在 table 中。这些学生的 ID 存储在一个数组中。问题是从文档中检索到的这个 ID 数组看起来有点奇怪。好像数组中有一个数组。 就像控制台中显示的这样: shown in console
{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>
从数据中查找得到one records
。你可以使用 [data]
var array = subject.findOne({subjectCode:selectedValue}, {fields:{_id:0, enrollment:1}});
Session.set(‘studentEnrolled’,[array]);
}
// 用于异步更新 更多: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();
},
});
正在从论坛复制我的答案:
首先,您要获取整个主题文档(并在第一个答案之后,将该数组包装到另一个数组中):
Session.set('studentEnrolled',[array]);
这意味着当您在这里搜索时:
return student.find({studentID:{$in:listOfStudent}});
您正在传递一个包含文档的数组,而不是 enrollments 数组。
您要做的是将注册存储在会话中:
Session.set('studentEnrolled', array.enrollments);
我还建议重命名变量 array
,因为它不是数组,这可能会导致您感到困惑