我使用knockout的subscribe函数来获取第一个下拉列表的选定值以绑定第二个下拉列表中的值。我将所选的下拉值存储在会话中,并在刷新时更改下拉列表的值。这时订阅被调用两次,因此我在下拉列表中重复了每个值。
self.getcountry = function () {
try {
//code
$.ajax({
//code
statusCode: {
200: function (response) {
$.each(response, function (index, data) {
self.country.push(data);
})
if(SESSIONVALUES!=null)
{
for (var i = 0; i < SESSIONVALUES.length; i++) {
var COUNTRYbind=SESSIONVALUES[i].vCOUNTRY;
$('#country option').filter(function () { return $.trim($(this).val()) == parseInt( COUNTRYbind); }).attr('selected', true);
$('#country ').change();
self.selectedCountry(COUNTRYbind);// this is used to trigger the subscribe function
}
}
}
}
});
} catch (exception) { }
};
这是订阅功能方法
self.selectedCountry.subscribe(function (newValue) {
//code
try {
$.ajax({
//code
statusCode: {
200: function (response) {
$.each(response, function (index, data) {
self.state.push(data);
})
if(SESSIONVALUES!=null)
{
for (var i = 0; i < SESSIONVALUES.length; i++) {
var statebind=SESSIONVALUES[i].vstate;
$('#states option').filter(function () { return $.trim($(this).val()) == parseInt(statebind); }).attr('selected', true);
$('#states').change();
}
}
}
}
});
} catch (Exception) { }
});
答案 0 :(得分:3)
我一小时前遇到过这个问题!
试试这个:
MyHashMap p = new MyHashMap<>();
p.put(0, "Z");
p.put(1, "A");
p.put(17, "A");
然后您可以订阅,当它被触发时,您可以将oldValue与newValue进行比较。
e.g。在您的ViewModel中
Put: Table empty. Inflating table to threshold:16
Inflate: RoundUpPowerOf2 of size=16
Inflate: Setting Min of [capacity * loadFactor, MAXIMUM_CAPACITY + 1] as threshold
Inflate: Given values[capacity=16, loadfactor=0.75, MAXIMUM_CAPACITY=1073741824
Creating array of Entry[] with size:16
Put: Key not null:0
IndexFor: calculating index for [given hash=0, length=16]
Put: Obtained index:0
Put: Incrementing modCounter
Put: Adding a new Entry[hash=0, key=0, value=Z, i=0]
Put: Key not null:1
IndexFor: calculating index for [given hash=1, length=16]
Put: Obtained index:1
Put: Incrementing modCounter
Put: Adding a new Entry[hash=1, key=1, value=A, i=1]
Put: Key not null:16
IndexFor: calculating index for [given hash=16, length=16]
Put: Obtained index:0
Put: Iteraing over table[0] elements
Put: Incrementing modCounter
Put: Adding a new Entry[hash=16, key=17, value=A, i=0]
希望这有帮助。
答案 1 :(得分:0)
您使用的jQuery代码不属于那里。您的代码应该只是改变viewmodel元素,而Knockout将使DOM反映viewmodel。然后你就不必破解subscribable
并将你的代码变成某种不受支持的混搭。使用淘汰赛。
This example可能会让您了解如何设置从属选择列表。
答案 2 :(得分:0)
只需添加“return false;”在功能结束时;