1
我已經在頁面上設置了以下用於更改學期的選擇。當選擇檢測到更改時,將觸發changeSemesters
函數,該函數運行AJAX,該頁面將使用特定於所選學期的數據替換頁面上的當前數據。KnockoutJS在設置默認值後選擇啓動更改
查看
<select data-bind="options: semestersArr, optionsText: 'name', optionsValue: 'id', value: selectedSemester, event: { change: changeSemesters }"></select>
視圖模型
this.selectedSemester = ko.observable();
//runs on page load
var getSemesters = function() {
var self = this, current;
return $.get('api/semesters', function(data) {
self.semestersArr(ko.utils.arrayMap(data.semesters, function(semester) {
if (semester.current) current = semester.id;
return new Model.Semester(semester);
}));
self.selectedSemester(current);
});
};
var changeSemesters = function() {
// run ajax to get new data
};
的問題是,在選擇觸發更改事件的changeSemester
功能在頁面加載時,並設置爲默認值。沒有使用按鈕可以避免這種情況嗎?
對不起,我昨天接受了這個,但我半睡半醒。我嘗試了你的第二種方法,但我不能用默認值初始化observable,因爲我等待在Ajax調用後獲取該值。如果我在那裏做init,'subscribe'會返回一個錯誤。我在這裏設置了一個小提琴:http://jsfiddle.net/hqH7K/ – Norbert
正如你所看到的,在數值加載之後,'selectedSemester'在瞬間變成10,因爲這是select中的第一個選項值。有沒有辦法讓選擇忽略初始化過程並觸發用戶選擇?使用按鈕可以解決問題,但我正在嘗試構建選擇而無需使用一個按鈕。 – Norbert
@Norbert - 你能從小提琴中澄清你的問題嗎?看起來它是不確定的,直到你的選擇回來。 –