Недавно я перенес проект моей компании в Durandal с помощью Knockout и JQuery. Прямо к проблеме: мне нужно инициализировать датпикер JQuery UI, используя два входа HTML. JQuery, однако, не в состоянии найти входы, когда я делаю это:JQuery не находит элементы DOM при использовании компоновки Durandal
вид:
<div data-bind="if: !CurrentUser()">
<h1 data-bind="html: DisplayName"></h1>
<div data-bind="compose: 'users/_UsersList.html'"></div>
</div>
<div data-bind="with: CurrentUser(), visible: CurrentUser()">
<h1>User detail</h1>
<div data-bind="compose: 'users/_UserDetail.html'"></div>
</div>
ViewModel - SelectUser() вызывается при выборе пользователем в первом DIV, затем второй DIV, а также пользователей/_UserDetail.html загружен:
users.SelectUser = function (user) {
users.CurrentUser(user);
/* ... */
$(function() {
$("#datepickerFrom").datetimepicker({
dateFormat: "d. m. yy",
timeFormat: "HH:mm:ss",
defaultDate: null
});
$("#datepickerTo").datetimepicker({
dateFormat: "d. m. yy",
timeFormat: "HH:mm:ss"
});
});
}
важной частью _UserDetail.html
<div class="control-group">
<label class="control-label">Active from</label>
<div class="controls">
<input type="text" data-bind="value: ActiveFrom" id="datepickerFrom" />
</div>
</div>
<div class="control-group">
<label class="control-label">Active to</label>
<div class="controls">
<input type="text" data-bind="value: ActiveTo" id="datepickerTo" />
</div>
</div>
Затем два входа HTML входят как неопределенные. Если я изменю div
с привязкой compose
к фактическому содержимому/_UserDetail.html, он работает нормально, но тогда представление быстро становится беспорядок - html-файл не совсем мал. Если бы кто-то мог указать мне в правильном направлении, я был бы благодарен. Благодаря!
Вы должны создать собственный обработчик привязки и использовать его в своем представлении. Также прочитайте durandal doc о манипуляциях с DOM: http://durandaljs.com/documentation/Interacting-with-the-DOM/ – nemesv
Вызываете ли вы код, загружающий представление? или это обрабатывается каркасом? – rossipedia
Вы имеете в виду 'compose:' code? Это вызвано фреймворком, но он срабатывает при срабатывании 'SelectUser()' - я вызываю эту функцию, когда я выбираю пользователя из пользователей/_UsersList.html. –