2012-08-06 137 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

相關問題