我們環境中的典型場景是允許用戶選擇由服務器(終端,產品,..)提供的選項列表,以及然後呈現所請求的數據。如何使用預定義的文本和值選項定義自定義挖空「選項綁定」
由服務器提供的選項是在名稱,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