我已經與knockout.js一起創建了一個gui,它允許用戶通過很多不同的主題來篩選他的數據。大多數這些主題由組合框項目表示,它們是html中的選擇項。如何在初始化時間禁用更新?
我用敲除訂閱的變化在所有的過濾器選擇的。訂閱事件只是調用收集過濾器設置的函數,通過ajax將其發送到服務器,並獲取滿足過濾器返回的項目列表。
此外,來自服務器的數據還包含每個選擇的可用過濾器主題。
我一直想知道的啓動速度,因爲它確實花了一段時間的GUI是完全可用。不久之前,我在數據傳遞函數中設置了一個斷點,並且在啓動時被稱爲大約20次時感到非常驚訝。 :-(
我怎樣才能防止這種
var viewModel = {
entries: ko.observableArray(), // this is receiving the filtered items
selectedMode: ko.observable(null), // Filter 1 initialized to null
selectedSubMode: ko.observable(null), // Filter 2 initialized to null
.
.
availableModes: ko.observableArray(), // Available filter items 1.
availableSubModes: ko.observableArray(), // Available filter items 2.
};
html元素,勢必是這樣的:
<select
id="selectMode"
tabindex="1"
data-bind="options: availableModes,
value: selectedMode,
optionsCaption: 'Any'"
>
</select>
在頁面的加載時間我發出selectedItems與單個負載被「空」,所以返回所有可用數據的第一頁,我設置了availableModes和availableSubModes的可用項目數據返回的所有選擇。
然後,TY迭代開始的PE:
第一選擇框改變其顯示到「任何」值我在作爲optionsCaption結合設置。這似乎觸發了變化事件。這將再次啓動對服務器的請求,並將下一個選擇項設置爲「Any」。這對於所有選擇元素都是重複的。
有沒有人有一個想法,我可以如何防止這種情況發生?
我的第一個想法是將數據加載過程中禁用在淘汰賽更新,更新完成後,強制更新。但是我找不到合適的方法。
感謝您的任何提示...
你如何訂閱下拉式更改? – 2012-04-03 21:11:55
我對每個選擇項使用以下內容: viewModel.selectedMode.subscribe(function(){ viewModel.loadData(); }); loadData是將請求發送到服務器並使用返回的數據的函數。 – nttakr 2012-04-04 22:30:19
只是一個想法......如果不是訂閱觀察者,而是訂閱下拉菜單的變化事件? – 2012-04-05 13:05:37