пользовательская привязка не срабатывает?

0

Я пытаюсь выполнить свою первую привязку в нокауте, но, похоже, не работает. Я получил этот образец из http://knockoutjs.com/documentation/custom-bindings.html.

скрипт

ko.bindingHandlers.slideVisible = {
    update: function (element, valueAccessor, allBindings) {
        debugger;
        // First get the latest data that we're bound to
        var value = valueAccessor();

        // Next, whether or not the supplied model property is observable, get its current value
        var valueUnwrapped = ko.unwrap(value);

        // Grab some more data from another binding property
        var duration = allBindings.get('slideDuration') || 400; // 400ms is default duration unless otherwise specified

        // Now manipulate the DOM element
        if (valueUnwrapped == true) $(element).slideDown(duration); // Make the element visible
        else $(element).slideUp(duration); // Make the element invisible
    }
};

HTML

<div data-bind="slideVisible: giftWrap, slideDuration:600">You have selected the option</div>
<label>
    <input type="checkbox" data-bind="checked: giftWrap" />Gift wrap</label>
<script type="text/javascript">
    var viewModel = {
        giftWrap: ko.observable(true)
    };
    ko.applyBindings(viewModel);
</script>

jsfiddle ссылка: http://jsfiddle.net/dingen2010/2gpL6/1/

Теги:
knockout.js
knockout-2.0

1 ответ

1
Лучший ответ

Он работает здесь, http://jsfiddle.net/YkeeB/ (с использованием того же кода), но также использует Knockout v3.0 (что и используются в документах на веб-сайте Knockout)

ko.bindingHandlers.slideVisible = {

    update: function (element, valueAccessor, allBindings) {
        // First get the latest data that we're bound to
        var value = valueAccessor();

        // Next, whether or not the supplied model property is observable, get its current value
        var valueUnwrapped = ko.unwrap(value);

        // Grab some more data from another binding property
        var duration = allBindings.get('slideDuration') || 400; // 400ms is default duration unless otherwise specified

        // Now manipulate the DOM element
        if (valueUnwrapped == true) $(element).slideDown(duration); // Make the element visible
        else $(element).slideUp(duration); // Make the element invisible
    }
};


  var viewModel = {
        giftWrap: ko.observable(true)
    };
    ko.applyBindings(viewModel);

Для Knockout v2.3.0 и ниже нет метода ko.unwrap. Вместо этого вы должны использовать ko.utils.unwrapObservable. Вот скрипка, в которой он работает для v2.2.1, http://jsfiddle.net/yt4Gs/1/.

Кроме того, для дальнейшего использования при использовании JSFiddle не ставьте скрипт в раздел HTML, даже если он находится внутри тегов <script>. Поместите в раздел JavaScript.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню