2

我有一个 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)

知道如何防止它在页面加载时触发吗?

4

2 回答 2

3

我对淘汰赛选项绑定的经验是,如果没有定义值,它将在加载时触发更新。

因此,如果“selectedOrder”只是一个没有值的 ko.observable(),那么它会将其值设置为“orderDropdown”数组中的第一项。这将导致您的更改事件触发。

于 2012-08-06T20:37:25.490 回答
3

这对我有用。

<select data-bind="options: orderDropdown,
    value: selectedOrder, 
    optionsCaption: '---',
    event: { change: function() { loadOrderDetails() } }">
</select>

我从这个特定的答案中得到了解决方案: https ://stackoverflow.com/a/10119888/1301774

于 2014-09-26T23:00:19.483 回答