2013-12-13 3 views
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/

ответ

1

Он работает здесь, http://jsfiddle.net/YkeeB/ (используя один и тот же код) - но это также с помощью Нокаут 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); 

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

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

Смежные вопросы