如何在下拉菜单中只加载当前和将来的事件并删除旧事件


How to load only current and future events in a dropdown menu and remove old

我想知道,是否可以在下拉菜单中只动态添加当前和未来的事件,而不加载旧的事件。在我们当前的表单上,我们必须手动从脚本中删除事件,这不是一种有效的方法。

谢谢,如果有任何建议,我们将不胜感激。

<select name="Event" Height="18px" Width="187px">
                  <option value="" selected>Select One</option>
                  <option value="Charles Hall Committee Meeting">Charles Hall Committee Meeting- July 7 2013</option>
 <option value="Townhall Meeting">Townhall Meeting-September 12 2013</option>
</select>

这些事件需要显示在下拉列表中,如果日期超过,则不应显示

正如我之前提到的,MVC框架是一个不错的选择。不过,选择正确的MVC框架——你有很多选择。您甚至可以使用纯Javascript,甚至jQuery来实现这一点,但MVC最终会让您的生活变得更轻松。我在下面提供的例子使用AngularJS(它很重,可能对你的预期用途来说太重了,但一旦你开始通过Angular工作,它就会让你的生活变得非常轻松)。

我不会把这个答案作为AngularJS的教程,但我建议你从网上可以找到的各种资源(从Angular的网站本身开始)中浏览它的教程和文档。下面的演示展示了如何使用angular动态填充select下拉列表的选项的示例,您可以按照这个示例进行操作。

首先,我假设事件是一个具有namedate属性的对象数组。然后使用angular的select指令,我们可以通过设置ngOptions(此处记录)将这些项目显示为选项。下面的代码段将使用所有事件的name属性填充<option>元素。

<select ng-model="event" ng-options="e.name for e in events">
  <option value="">Select Event</option>
</select>

现在,我们想让过去的事件不会出现。处理这一问题的"角度"魔法发生在为app创建的自定义filter中(自定义过滤器教程)。

app.filter('checkDates', function() {
  return function(event) {    
    var filterEvent = [];
    for (var i = 0, length = event.length; i < length; i++){
      if (event[i].date.getTime() >= Date.now()) filterEvent.push(event[i]);
    }
    return filterEvent;
  };
});

这将根据您编写的逻辑过滤出模型中使用的对象数组。在这种情况下,所有大于今天日期的事件都会添加到一个新数组中,该数组将在筛选器中返回。

然后,对要筛选的模型使用过滤器checkDates。因此,在ng-options中定义您将使用的过滤器(一旦您开始更多地使用angularjs,您就会意识到您还可以在其他地方应用过滤器)。

<select ng-model="event" ng-options="e.name for e in events | checkDates">
  <option value="">Select Event</option>
</select>

关于过滤器的一些资源:什么是过滤器,使用angularjs中的过滤器。

再次,我强烈建议您也查看AngularJS的外部资源。正如前面提到的,这只是解决这个问题的一个MVC框架的例子,肯定有更多的选择——但选择MVC框架实际上取决于个人偏好,我只是喜欢AngularJS提供的功能。