knockout.js Knockoutjs foreach n行检查下拉列表是否有值

uujelgoq  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(88)

我有这样的html标记:

<!-- ko foreach: Orders -->
  <div class="row">
    <div>
      <select class="form-control"  data-bind="attr: { id: 'prefix_' + $index() }, options: TeacherNames, optionsValue: 'TeacherId', optionsText: 'TeacherName', optionsCaption: 'Choose Teacher', event: { change: $root.teacherChanged }">
      </select>
    </div>
    <div>
      <a href='#' data-bind="click: $root.RequestImage" class="green-btn blue pull-right">
        <span class="glyphicon glyphicon-cloud-download"></span> Download 
      </a>
    </div>
  </div>
<!-- /ko -->

在foreach循环中将有n个项目,在开发时将不知道这些项目。
我想做的是当$root.RequestImage被点击时,代码需要检查在相应的下拉列表中是否有该行的选择,如果有,则继续,否则显示带有“错误”消息的警告框。
所以在RequestImage中应该发生那个动作,这是RequestImage函数目前的情况:

self.RequestImage = function () {

};

我如何才能做到这一点?

更新

订购虚拟机:

var self = this;
self.Orders = ko.observableArray([]);

$.ajax({
  type: "POST", url: "/webservices/InfoWS.asmx/GetOrders",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (data) {
    if (data.d != null) {
      var orderIds = [];
      ko.utils.arrayForEach(data.d, function (item) {

        item._teacherOrders = ko.observable();

        $.ajax({
          type: "POST",
          url: "/webservices/InfoWS.asmx/GetTeachersForMyAccount",
          contentType: "application/json; charset=utf-8",
          data: "{'orderId': " + JSON.stringify(item.OrderId) + "}",
          dataType: "json",
          success: function (data) {
            if (data) {
              return item._teacherOrders(data.d);
            }
          },
          error: function (n) {
            alert('Error retrieving teachers for orders, please try again.');
          }
        });

        item.TeacherNames = ko.computed(function () {
          return item._teacherOrders();
        });

        self.Orders.push(item);
        orderIds.push(item.OrderId);

      });
    }
  },
  error: function (data) {
    var response = JSON.parse(data.responseText);
    console.log("error retrieving orders:" + response.Message);
  }
});
5us2dqdw

5us2dqdw1#

我会这样做:
1.将可观察selectedTeacher添加到每个有序对象
1.将value: selectedTeacher添加到您的选择中:
<select class="form-control" data-bind="attr: { id: 'prefix_' + $index() }, options: TeacherNames, optionsValue: 'TeacherId', ..., value: selectedTeacher"></select>
1.检查RequestImage事件中可观察项

if ( !data.selectedTeacher() ) {
        alert('Error: select teacher')
} else {
        alert('Success')
}

一个工作演示-Fiddle

相关问题