我正在尝试在knockout中实现自定义绑定以创建一个select元素。我不使用选择绑定的一个区别是因为我的选择总是相同的。
使用自定义绑定的原因是因为我有很多地方会使用相同的选择,我希望这会使我的代码更简单。所以我的尝试可以在this fiddle中找到,目前我正在努力使用更新功能(我希望能够检索我选择的语言)。
ko.bindingHandlers.langSelect = {
init: function(element, valueAccessor){
var langCur = ko.utils.unwrapObservable(valueAccessor());
ko.utils.domNodeDisposal.addDisposeCallback(element, function (){
$(element).remove();
});
var list = '', lang = ['en', 'de', 'ja'], i, l = lang.length, s ='';
for (i = 0; i < l; i++){
s = (lang[i] === langCur ) ? 'selected' : '';
list += '<option value="'+ lang[i] +'"'+ s +'>'+ lang[i] +'</option>';
}
$(element).html(list);
},
update: function(element, valueAccessor){
}
}
任何人都可以帮我吗?如果自定义绑定不是最佳选择,我不介意更改它。
答案 0 :(得分:1)
获得所需内容的好方法是创建要绑定的模板。您可以在the knockout documentation page for the template binding了解有关模板的更多信息。以下是您的语言选择器的示例:
模板HTML:
<script type="text/html" id="languageSelectorTemplate">
<select data-bind="options: ['en','de','ja'], value: selectedLanguage"></select>
</script>
JS:
function AppViewModel() {
this.lang = ko.observable("de");
}
ko.applyBindings(new AppViewModel());
使用模板的示例:
<div data-bind="template: {name: 'languageSelectorTemplate', data: { selectedLanguage: lang } }"></div>
您可以在http://jsfiddle.net/8a9JB/2/找到上面的示例。