【发布时间】:2014-06-07 12:47:42
【问题描述】:
我正在尝试创建一种自定义下拉菜单,该下拉菜单将具有一个方法名称,它将从中获取其所有元素,并且在淘汰模型绑定之前,它应该等待从给定的方法填充列表,然后启动它的默认行为。
到目前为止,我成功地从给定方法填充数据。但问题是如何告诉淘汰绑定等到我的 init 方法完成其异步工作。
ko.bindingHandlers.serviceMethod = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var serviceName, optionsValue, optionsText, value, optionsCaption, isCompleted;
if (element.nodeName == 'SELECT') {
optionsValue = allBindings().optionsValue || 'value';
optionsText = allBindings().optionsText || 'text';
serviceName = valueAccessor();
var l = $(element);
serviceName.apply().done(function (results) {
l.empty();
$.each(results.List, function (j, result) {
l.append($("<option />").val(result[optionsValue] || '').text(result[optionsText] || ''));
})
});
}
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
//what to do now in order to let knockout wait for list to be populated
}
}
我的绑定是
<select name="state" data-bind="serviceMethod:registrationService.getAllStates,value: model.state" id="ddlState"></select>
【问题讨论】:
标签: javascript jquery knockout.js knockout-2.0 knockout-mvc