我们环境中的典型场景是允许用户选择由服务器(终端,产品,..)提供的选项列表,以及然后呈现所请求的数据。如何使用预定义的文本和值选项定义自定义挖空“选项绑定”
由服务器提供的选项是在名称,ID的格式,并因此以下敲除构建体中使用的所有经常:
<select data-bind="options: serverOptions, optionsText: 'Name', optionsValue: 'ID', value: selectedOption>
这将是理想的是使自定义bindingHandler,叫做“NamedIdOptions”在allBindingsAccessor()上指定optionsText和optionsValue,然后重定向到标准选项绑定处理程序。
即
<select data-bind="NamedIdOptions: serverOptions, value: selectedOption"></select>
此之前,我已经做自己的绑定填补了选项我自己的处理程序 - 但是,我更愿意使用由选项结合处理器提供了框架。
我试过不同的方法没有太多的成功 - 选项绑定使用allBindings ['optionsValue']和allBindings ['optionsText']来访问该值,似乎我没有办法设置这些。 (我想,以避免在使用applyBindingsToNode方法写的线沿线的东西:
ko.bindingHandlers.NamedIdOptions = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel)
{
var allBindings = allBindingsAccessor();
allBindings.*FORCESET*("optionsText", "Name");
allBindings.*FORCESET*("optionsValue", "ID");
retun ko.bindingHandlers.options.init.apply(this, arguments);
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel)
{
retun ko.bindingHandlers.options.update.apply(this, arguments);
}
}
然而,好像我没有方法可行设置在allBindings任何
我不允许。使用
allBindings['_ko_property_writers']['optionsText']("Name");
allBindings['_ko_property_writers']['optionsValue']("ID");
我真的希望避免applyBindingsToNode在init构造为
Knockout - is it possible to combine standard select bindings with a custom binding?
有没有人现在就解决问题的简单方法?
我不知道这是否准确回答你的问题,但是如果你正在创建一个可重用的控件,你总是可以使用computedOptions和computedName,并且它们是被设置为任何传入值的可观察值。 –
在以前的Knockout版本中,您曾经能够获得与添加optionsText和optionsValue直接allBindings,它会工作。这就是我所做的与你所描述的完全相同的场景。 – BrandonLWhite