我有一个选择控件,我有订阅。当我不应用剑道样式时,控件按预期工作,订阅代码触发一次,并且不会重置onBlur或任何其他原因。当我确实应用了kendoDropDownList时,订阅行为始终不稳定。
$("select").kendoDropDownList();
不稳定的行为是选择一个值,订阅会触发。单击另一个控件,即使select控件将值显示为未更改,也会再次触发订阅事件并且值未定义。后续选择会按预期触发订阅。 使用kendo时,使用选择控件上的向下/向上箭头也不会触发。
<select id="newExperienceFrequency" data-bind="value: frequency, options: $root.controls.frequencies, optionsText: 'name', optionsValue: 'id', optionsCaption: 'Select', event: { mouseover: mouseoverFrequency, mouseout: mouseoffFrequency }" class="select frequencyTip" title="foo"></select>
self.proficiency.subscribe(function () {
self.proficiencyId = self.proficiency();
console.log('proficiency subscribed: ' + self.proficiency());
my.setCounterHint($("#newExperienceFrequency").val(), self.proficiency());
var tip = "Don't just list those skills your strongest in. It's just as important to add new skills you are aquiring!";
var result = $.grep(my.ajaxData.member.Proficiencies, function (e) { return e.Id == self.proficiency(); });
if (result.length == 0) {
// not found
} else if (result.length == 1) {
// access the foo property using result[0].foo
tip = result[0].Name + ':\nAutonomy: ' + result[0].Autonomy + '\nContext: ' + result[0].nContext + '\nKnowledge: ' + result[0].Knowledge + '\nWorkmanship: ' + result[0].Workmanship;
} else {
// multiple items found
}
$(".proficiencyTip").attr('title', tip).attr('alt', tip);
$(".proficiencyQuestionMark").fadeIn('slow');
});
这是一个已知问题,还是我只是做错了什么?我是否通过尝试将Knndo与Knockout一起使用来为自己做更多工作?如果我只是使用剑道并放弃淘汰赛,这些问题会消失吗?
答案 0 :(得分:0)
我不像KendoUI那样熟悉我的淘汰赛。但是,如果我不得不猜测剑道会在元素上触发一个更改的事件,这会导致击倒比正常情况更多。
我建议您为订阅提供新值的参数,而不是在订阅中引用self.proficiency()
。然后,您可以检查订阅中是否定义了值。
另外,我建议重新评估一种避免在viewmodel中执行jquery的方法。如果必须执行jquery制作自定义动画或新绑定。您很可能将Ui绑定到VM中的另一个属性并将视图/ vm解耦。
例如,questionmark元素可以绑定到布尔值observable。制作自定义绑定fadeVisible。我依稀记得有文档的文档。这不难做到。 (提示:http://knockoutjs.com/examples/animatedTransitions.html)
self.proficiency.subscribe(function(val) {
if (typeof(val) === 'undefined')) {
return;
}
});