Knockout Binding Handler没有调用更新

时间:2017-07-14 14:05:08

标签: knockout.js

我是淘汰赛的新手,目前正在尝试创建一个自定义绑定处理程序,将对象映射到从数据库生成的html。它正确设置变量,但是当值改变时,它不会更新对象。

 ko.bindingHandlers.CustomBinding = {
        init: function (element, valueAccessor, allBindings, bindingContext) {   
            ko.utils.registerEventHandler(element, "change", function () {
                var observable = valueAccessor();
                var valueUnwrapped = ko.unwrap(observable);   
                observable($(element).val());   
            });

            //Adds answers
            var accessor = ko.utils.unwrapObservable(valueAccessor());               
            UpdateSurveyQuestion(element, accessor, false);
            $('.select2').trigger('change.select2');  

        },
        update: function (element, valueAccessor, allBindings, bindingContext) {
            var value = valueAccessor();
            var valueUnwrapped = ko.unwrap(value);

            UpdateSurveyQuestion(element, valueUnwrapped, true);
            $('.select2').trigger('change.select2');
        }
    }; 

HTML

<!-- ko if: QuestionType == 1 -->
<div class="margin-bottom60">
    <input type="text" class="form-control input-sm" data-bind="CustomBinding: Field">
</div>
<!-- /ko -->
<!-- ko if: QuestionType == 3 -->
<div class="margin-bottom60">                                                
    <select class="selectBasic form-control input-sm select2" data-placeholder="Please select an option..." 
            data-bind="select2:{options:{data: DropdownName, minimumResultsForSearch: 'Infinity'}}, CustomBinding: Field"></select>
</div>
<!-- /ko -->
<!-- ko if: QuestionType == 4 -->
<div class="margin-bottom60">
    <select class="selectBasic form-control input-sm select2" data-placeholder="Choose all that apply..."
            data-bind="select2:{options:{data: DropdownName, minimumResultsForSearch: 'Infinity'}}, CustomBinding: Field" multiple></select>                                                   
</div>                                               
<!-- /ko -->      
<!-- ko if: QuestionType == 5 -->
<div class="margin-bottom60">
    <textarea type="text" class="form-control input-sm" data-bind="CustomBinding: Field" rows="5"></textarea>
</div>                                                
<!-- /ko --> 

对此有任何帮助都很棒

0 个答案:

没有答案