淘汰赛 - 事件似乎在页面加载时触发?

时间:2012-08-06 19:58:22

标签: knockout.js

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

我知道如何防止这种情况在页面加载时触发吗?

2 个答案:

答案 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