Я подробно рассказал об этом в своем блоге: http://chadkuehn.com/jquery-validate-select2/
Когда вы помещаете Select2 в тег SELECT, он скрывает оригинальный элемент. Так что в плагине проверки вы должны настроить правильную разметку переноса при выделении и выделении.
highlight: function (element, errorClass, validClass) {
var elem = $(element);
if (elem.hasClass("select2-offscreen")) {
$("#s2id_" + elem.attr("id") + " ul").addClass(errorClass);
} else {
elem.addClass(errorClass);
}
},
unhighlight: function (element, errorClass, validClass) {
var elem = $(element);
if (elem.hasClass("select2-offscreen")) {
$("#s2id_" + elem.attr("id") + " ul").removeClass(errorClass);
} else {
elem.removeClass(errorClass);
}
}
Смотрите DEMO здесь.
Вы можете сделать это, используя "новый" вместо "переопределить", чтобы скрыть защищенное свойство родителя следующим образом:
public class ChildOne : Parent
{
public new int PropertyOne // No Compiler Error
{
get { return base.PropertyOne; }
set { base.PropertyOne = value; }
}
// PropertyTwo is not available to users of ChildOne
}
public class ChildTwo : Parent
{
// PropertyOne is not available to users of ChildTwo
public new int PropertyTwo
{
get { return base.PropertyTwo; }
set { base.PropertyTwo = value; }
}
}
Вы не можете изменить доступ, но можете повторно объявить член с более широким доступом:
public new int PropertyOne
{
get { return base.PropertyOne; }
set { base.PropertyOne = value; }
}
Проблема в том, что это другой PropertyOne
, и наследование / виртуальное может работать не так, как ожидалось. В приведенном выше случае (где мы просто вызываем base. *
, а новый метод не является виртуальным), вероятно, это нормально. Если вам нужен настоящий полиморфизм выше this, то вы не можете этого сделать (AFAIK) без введения промежуточного класса (поскольку вы не можете new
и переопределить
один и тот же член того же типа):
public abstract class ChildOneAnnoying : Parent {
protected virtual int PropertyOneImpl {
get { return base.PropertyOne; }
set { base.PropertyOne = value; }
}
protected override int PropertyOne {
get { return PropertyOneImpl; }
set { PropertyOneImpl = value; }
}
}
public class ChildOne : ChildOneAnnoying {
public new int PropertyOne {
get { return PropertyOneImpl; }
set { PropertyOneImpl = value; }
}
}
Важным моментом в приведенном выше является то, что все еще существует один виртуальный член, который нужно переопределить: PropertyOneImpl
.
НЕТ. Тем не менее, вы можете скрыть унаследованное свойство с помощью Your's
public class ChildTwo: Praent {
public new int PropertyTwo {
// do whatever you want
}
}
ps: это больше не отношение виртуальное / переопределение (т.е. нет полиморфных вызовов)