我有一個3層級聯選擇列表,我已經使用knockout.js/jQuery/json實現。級聯選擇默認值
有些情況下,選擇框中只有一個選擇 - 在這種情況下,我不想強制用戶不得不手動選擇它,而是將其默認爲單個值,然後級聯到下一個框自動。這可以做到嗎?
我的選擇列表(第一個是目前略有不同,因爲它是由MVC剃刀產生的視圖與視圖模型提供直接值):
<!--Variants-->
<select class="dim" data-bind="value: selectedDim1" id="Dim1" name="Dim1" onchange="FetchDim2();"><option selected="selected" value="">Select Colour</option>
<option value="Black">Colour:Black</option>
<option value="NAVYBLUE">Colour:Navy Blue</option>
</select>
<select id="Dim2" data-bind="value: selectedDim2, options: ddlDim2, optionsText: 'Text', optionsValue: 'Value', optionsCaption: 'Select Waist Size'" class="dim"></select>
<select id="Dim3" data-bind="value: selectedDim3, options: ddlDim3, optionsText: 'Text', optionsValue: 'Value', optionsCaption: 'Select Leg Length'" class="dim"></select>
我敲代碼:
function DDLViewModel() {
this.ddlDim1 = ko.observableArray([]);
this.ddlDim2 = ko.observableArray([]);
this.ddlDim3 = ko.observableArray([]);
this.selectedDim1 = ko.observable();
this.selectedDim1.subscribe(FetchDim2, this);
this.selectedDim2 = ko.observable();
this.selectedDim2.subscribe(FetchDim3, this);
this.selectedDim3 = ko.observable();
this.selectedDim3.subscribe(FetchVariant, this);
}
var objVM = new DDLViewModel();
// Activates knockout.js
ko.applyBindings(objVM);
function FetchDim2() {
$.ajax({
type: 'POST',
url: '/product/getdims/', // we are calling json method
dataType: 'json',
// here we get value of selected dim.
data: { id: 20408,
level: 2,
head: 'Waist Size',
code: $("#Dim1").val()
},
success: function (dims) {
// dims contains the JSON formatted list of dims passed from the controller
objVM.ddlDim2(dims);
objVM.ddlDim3.removeAll();
},
error: function (ex) {
alert('Failed to retrieve dims.' + ex);
}
});
}
function FetchDim3() {
$.ajax({
type: 'POST',
url: '/product/getdims/', // we are calling json method
dataType: 'json',
// here we get value of selected dim.
data: { id: 20408,
level: 3,
head: 'Leg Length',
code: $("#Dim2").val()
},
success: function (dims) {
// dims contains the JSON formatted list of dims passed from the controller
objVM.ddlDim3(dims);
},
error: function (ex) {
alert('Failed to retrieve dims.' + ex);
}
});
}
我猜我(a)需要指定一個默認值,如果只有在選擇時,並且(b)強制調用填充下一級的代碼的調用?不知道如何做,但沒有打破一切,但!
非常感謝 - 我扯下一些代碼從一個jQuery版本我的工作因此混搭 - 它似乎工作,但我需要做的第一下拉相同 - 如果只有一次選擇,選擇它並填充下拉2 - 但是,這是由MVC視圖模型預先填充 - 我應該交換工作與其他2次下降相同的方式?如果是這樣,我可以強制頁面加載時?這是否也會級聯下來,如果1,2和3只有一個選擇,他們都會被填滿? – chilluk
另外我創建了我的FetchVariant()函數,但是我不能爲我的生活訪問所得到的數據 - 我是否必須將observableArray映射到另一個模型以便能夠在整個頁面中使用它? – chilluk
你問的是非常廣泛的後續問題。我建議爲每個單獨的案例詢問一個新的Stack Overflow問題,包括每個問題的簡化示例。另外,您可能需要一位朋友或同事幫助思考設計。另外,如果你還沒有,請查看KnockoutJS教程。 (通過KnockoutJS將客戶端MVVM與服務器端預填充選擇框混合在一起可能是一個多毛的主題...) – Jeroen