2012-08-06 208 views
2

我有有像这样一个下拉列表视图模型:敲除 - 事件似乎在页面加载时触发?

<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)

任何想法如何,我可以preve nt这从页面加载发射?

+0

这很可能是当你要么设置orderDropdown的价值或selectedOrder价值的事件将触发。 – 2012-08-06 20:30:01

回答

3

我对knockout选项绑定的体会是,如果它没有定义的值,它会在加载时触发更新。

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

+0

是的,我已经添加了一张支票来查看我的'selectedOrder'属性是否未定义。 – CallumVass 2012-08-07 11:36:23

+0

另外一个警告 - 如果您要切换控件的可见性,淘汰赛将首先绑定选择,然后隐藏它。如果您的隐藏选择没有定义值,则更新事件可能会触发。 – kiprainey 2013-07-17 16:26:06

+0

我检查了一个默认值'ko.observable('somevalueExistingInList')',并且仍然是在页面加载时触发更改事件。 :/ – Ruchan 2014-03-12 11:11:34

2

这对我有用。

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

我得到了这个特别的答案液对SO: https://stackoverflow.com/a/10119888/1301774

相关问题