Я получил эту привязку для нокаута:
ko.bindingHandlers.spinner = {
init: function (element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().spinnerOptions || {};
$(element).spinner(options);
//handle the field changing
ko.utils.registerEventHandler(element, "spinchange", function () {
var observable = valueAccessor();
observable($(element).spinner("value"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).spinner("destroy");
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
current = $(element).spinner("value");
if (value !== current) {
$(element).spinner("value", value);
}
}
};
Это не проблема, но когда я добавляю много их на страницу, у меня возникают проблемы с производительностью. На моей странице у меня есть 44 прядильника, и это вызывает загрузку 2 секунд. Замена счетчика на "значение" -binding устраняет проблему с производительностью, но не выглядит великолепно. Любые предложения, как ускорить bindHandler, чтобы сделать его более эффективным?
В вашей пользовательской привязке ничего нет, что значительно замедляет ее. Ваша привязка - прекрасный пример простейшей формы объединения JQuery UI-плагина с Knockout. У меня много таких привязок, с сотнями, добавленными на страницу и без проблем с производительностью.
Так в чем проблема? Мы не можем вам сказать, потому что соответствующего кода там нет. Самая медленная часть этой функции, вероятно, сама прядильщик, а не связанная вами связь. Чтобы ускорить работу, вам нужно оптимизировать плагин spinner. Я не знаю, возможно ли это, потому что в этом посте не упоминается об этом плагине.
В целом другая заметка: отображение 44 роликов на странице, вероятно, не поможет пользователям. Возможно, вам следует замедлить использование счетчика: p