【发布时间】:2016-08-22 04:05:27
【问题描述】:
我有许多“多个”选择器,但为了这个示例,假设我有两个。
<form class="input-field col s10">
<select multiple id="jans-room21">
<option value="" disabled selected>Add Names</option>
{{#each Jans21}}
<option value= '{{FullName}}' selected = {{formatSelectedNames21 RoomJans}} >{{FullName}}</option>
{{/each}}
</select>
</form>
<form class="input-field col s10">
<select multiple id="jans-room22">
<option value="" disabled selected>Add Names</option>
{{#each Jans22}}
<option value='{{FullName}}' selected = {{formatSelectedNames22 RoomJans}}>{{FullName}}</option>
{{/each}}
</select>
</form>
Jans21 和 Jans22 正在从数据库返回一些文档。它们将显示该房间的选定名称,或者那些没有“RoomJans”属性或“RoomJans”等于“”的名称。它们将排除在另一个选择器中选择的那些名称。
Template.jansNameSelect.helpers({
Jans21: function () {
return Programs.find({ $and: [{ CampYear: Session.get('GlobalCurrentCampYear') }, { $or: [{ RoomJans: '' }, { RoomJans: { $exists: 0 }}, { RoomJans: { $in: ['21A', '21B'] }}]}]}, { sort: { FullName: 1 }}).fetch();
},
Jans22: function () {
return Programs.find({ $and: [{ CampYear: Session.get('GlobalCurrentCampYear') }, { $or: [{ RoomJans: '' }, { RoomJans: { $exists: 0 }}, { RoomJans: { $in: ['22A', '22B'] }}]}]}, { sort: { FullName: 1 }}).fetch();
}
});
单击按钮时,会调用一个方法来更新数据库并存储这些名称。
// ...
$('#room_21_jans_button').on('click', function() {
var roomValue = $('input[name="room_select_21_jans"]:checked').val();
if (roomValue) {
var selectedValues = [];
$r21jans.find("option:selected").each(function () {
selectedValues.push($(this).val());
});
selectedValues.splice(0, 1);
var unselectedValues = [];
$r21jans.find("option:not(:selected)").each(function () {
unselectedValues.push($(this).val());
});
Meteor.call('roomUpdateSN',
selectedValues,
unselectedValues,
roomValue,
Session.get('GlobalCurrentCampYear')
);
//...
我所追求的是,当在第一个选择器中选择名称并随后保存到数据库时,第二个选择器将更新其名称列表以删除从第一个选择器中选择的名称。我原以为这将是反应性的,因为我正在执行数据库操作,因此如果从第一个选择器中选择名称并将其保存到数据库,则“Jans22”函数将再次触发。但事实并非如此。但是,它会在刷新时加载正确的名称。有没有办法让它变得被动?
【问题讨论】:
-
您的代码乍一看应该是反应式的。您是否使用在呈现后操纵选择的 UI 组件?如果是这样,在选项更新后可能需要刷新。
-
想一想,我正在使用 Materialize 选择器。我想知道这些选择器是否不会响应 Meteor 的反应?
标签: meteor meteor-blaze