Это не идеальная ситуация, но из-за другого связывающего нокаута, который я использую, я нахожусь в ситуации, когда мне нужно получить элемент, с которым связан наблюдаемый объект, если он действительно связан с чем-либо.
Так есть ли способ сделать это?
== Обновление ==
Я не хотел добавлять дополнительный контекст, если это запутывает вопрос, но, поскольку он может получить ответ, более соответствующий ожиданиям, вот сценарий.
Я использую привязку валидации, которая выявляет все ошибки, используя метод ko.validation.group(model)
. Однако проблема в том, что only дает вам текстовые ошибки, но не дает никакого контекста относительно того, какая часть модели выдает вам эти ошибки. Поэтому я внес небольшое изменение в источник, чтобы теперь возвращать наблюдаемые, привязанные к каждой ошибке, поскольку это может быть полезно для нескольких сценариев, но здесь мне нужно иметь возможность связать это с элементом, чтобы я мог отобразить некоторые встроенная проверка некоторого вида.
Knockout Validation обеспечивает очень простую встроенную проверку, в которой он создает диапазон после вашего элемента, и вы можете дать ему класс, но это слишком для моих нужд, так как в настоящее время мы используем Qtip и другие системы уведомлений для отображения проверки ошибки, и из-за этого мне нужно иметь возможность иметь элемент Dom и ошибку. Пока у меня есть наблюдаемая и ошибка, но мне нужно связать этот наблюдаемый объект (который может быть любым свойством ko.observable () из модели) с его данным элементом DOM, если у него есть привязка элемента.
Поскольку все, что у меня есть, это объект, и я использую валидацию, основанную на модели, а не на пользовательском интерфейсе, проблема на самом деле не будет решена с помощью пользовательской привязки. В идеале мне нужно иметь возможность вскрыть брак до наблюдаемого объекта (неизвестного ko.observable()
) до элемента.
Не слишком специфично для проекта, но мой текущий проект абстрагирует валидацию, когда события запускаются (т.е. EventSystem.SendEvent(ValidationEvents.ValidationFailed, <element>, <error>)
), тогда система валидации прослушивает эти события и связывает ошибку с элементом, будь то всплывающая подсказка, рычание уведомление о стиле, окно оповещения и т. д. Поэтому я пытаюсь найти лучший способ сохранить эту абстракцию при получении валидации из наблюдаемых моделей, а не элементов DOM пользовательского интерфейса (т. е. jquery-ui)
== Редактировать 2 ==
Меня немного поразило то, что Knockout Validation знает элементы для наблюдаемых, чтобы вставить свои собственные элементы проверки, однако они просто отбрасывают существующую привязку значений, поэтому я просто собираюсь изменить это, чтобы добавить элементы для любые элементы проверки, основанные на их методе isValidatable()
, по крайней мере, таким образом, для каждой ошибки я могу связать ее с наблюдаемой, а для любых наблюдаемых с привязками элементов я могу привязать их к элементам, и если их нет, то это нормально они будут просто формами ошибок проверки. Я попробую, так как это должно быть что-то вроде (еще не проверено):
if(utils.isValidatable(valueAccessor())) {
valueAccessor().extend({hasElementalBinding: true, elementalBinding: element});
}
else {
valueAccessor().extend({hasElementalBinding: false});
}
Примерно в строке 250 в registerValueBindingHandler
я оставлю этот вопрос открытым на некоторое время, если у кого-то есть лучшее решение.