敲除 - 事件似乎在页面加载时触发?
我有有像这样一个下拉列表视图模型:敲除 - 事件似乎在页面加载时触发?
<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这从页面加载发射?
我对knockout选项绑定的体会是,如果它没有定义的值,它会在加载时触发更新。
所以,如果“selectedOrder”只是一个没有值的ko.observable(),那么它会将它的值设置为“orderDropdown”数组中的第一项。这将导致您的更改事件触发。
是的,我已经添加了一张支票来查看我的'selectedOrder'属性是否未定义。 – CallumVass 2012-08-07 11:36:23
另外一个警告 - 如果您要切换控件的可见性,淘汰赛将首先绑定选择,然后隐藏它。如果您的隐藏选择没有定义值,则更新事件可能会触发。 – kiprainey 2013-07-17 16:26:06
我检查了一个默认值'ko.observable('somevalueExistingInList')',并且仍然是在页面加载时触发更改事件。 :/ – Ruchan 2014-03-12 11:11:34
这对我有用。
<select data-bind="options: orderDropdown,
value: selectedOrder,
optionsCaption: '---',
event: { change: function() { loadOrderDetails() } }">
</select>
我得到了这个特别的答案液对SO: https://stackoverflow.com/a/10119888/1301774
这很可能是当你要么设置orderDropdown的价值或selectedOrder价值的事件将触发。 – 2012-08-06 20:30:01