我有一个ViewModel,它有一个如下所示的下拉列表:
<select data-bind="options: orderDropdown,
value: selectedOrder,
optionsCaption: '---',
event: { change: loadOrderDetails }">
</select>
然后loadOrderDetails
设置如下:
// loads details of selected order
self.loadOrderDetails = function () {
$.ajax({
url: "/api/OrderDetails",
data: { id: self.selectedOrder() },
type: "GET",
success: function (data) {
self.orderDetails(data);
}
});
}
问题是,这个事件似乎在页面加载时触发,就像我在控制台中查看时看到的那样:
GET http://localhost:52559/api/OrderDetails 400 (Bad Request)
我知道如何防止这种情况在页面加载时触发吗?
答案 0 :(得分:3)
我对敲除选项绑定的经验是,如果没有定义值,它会在加载时触发更新。
因此,如果“selectedOrder”只是一个没有值的ko.observable(),那么它会将其值设置为“orderDropdown”数组中的第一项。这将导致您的更改事件触发。
答案 1 :(得分:3)
这对我有用。
<select data-bind="options: orderDropdown,
value: selectedOrder,
optionsCaption: '---',
event: { change: function() { loadOrderDetails() } }">
</select>
我在SO上得到了这个特定答案的解决方案: https://stackoverflow.com/a/10119888/1301774