knockout.js 自定义bindingHandler

在ko中我们通过handler来根据绑定的值进行操作,内置的功能已十分强大,但往往我们还有些特殊的需求,例如希望与jquery插件共用,让元素绑定时就通过jquery初始化。下面我们来讲下如何自定义

我需要看看我绑定了什么值,方便进行调试

ko.bindingHandlers.console = {
    init: (element, valueAccessor) ->
        console.log valueAccessor()
}
<div data-bind='console: $rawData'></div>

这个栗子很简单,自己直接试试吧

开发中经常会遇到click事件只是为了让一个属性从false变为true,从true变为false,老得写事件,好麻烦哦

ko.bindingHandlers.toggle = {
    value = valueAccessor() #获取绑定的对象
    init: (element, valueAccessor) ->
        $(element).click ->
            value !value()
}
<div data-bind='toggle: bool_value'></div>

聪明如你,一定看得懂

我有一个日历控件,希望ko绑定后元素能自动初始化

ko.bindingHandlers.calendar = {
    init: (element) ->
        $(element).calendar()
}
<input type='text' data-bind='calendar: true' />

visible太挫,我要来点动画

ko.bindingHandlers.slideVisible = {
    update: (element, valueAccessor, allBindings) ->
        value = ko.unwrap valueAccessor()
        duration = allBindings.get('slideDuration') or 400
        if value is on
            $(element).slideDown duration
        else
            $(element).slideUp duration
}
<div data-bind='slideVisible: bool_value, slideDuration: 1000'>css给我弄个高度</div>

解析:bool_value是一个ko对象,内容为bool值,随着改变会触发slideVisible的update,从而根据bool_value的值来决定绑定的元素显示与否,并且可以获取相同元素内绑定的slideDuration的值来作为动画时间

转载于:https://my.oschina.net/zhengnazhi/blog/750890

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值