• Knockout.Js官网学习(click绑定)


    前言

    click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数。大部分是用在button,input和连接a上,但是可以在任意元素上使用。

    简单示例

    复制代码
    <h2>ClickBind</h2>
    <div>
        You've clicked <span data-bind="text: numberOfClicks"></span> times
        <button data-bind="click: incrementClickCounter">Click me</button>
    </div>
    <script type="text/javascript" src="~/Scripts/knockout-2.3.0.debug.js"></script> 
    <script type="text/javascript">
        var viewModel = {
            numberOfClicks: ko.observable(0),
            incrementClickCounter: function() {
                var previousCount = this.numberOfClicks();
                this.numberOfClicks(previousCount + 1);
            }
        };
        ko.applyBindings(viewModel);
    </script>
    复制代码

    预览效果

      

    每次点击按钮的时候,都会调用incrementClickCounter()函数,然后更新自动更新点击次数。

    你可以声明任何JavaScript函数 – 不一定非要是view model里的函数。你可以声明任意对象上的任何函数,例如: someObject.someFunction。

    View model上的函数在用的时候有一点点特殊,就是不需要引用对象的,直接引用函数本身就行了,比如直接写incrementClickCounter 就可以了,而无需写成: viewModel.incrementClickCounter(尽管是合法的)。

    传参数给你的click 句柄

     最简单的办法是传一个function包装的匿名函数:

    <button data-bind="click: function() { viewModel.myFunction('param1', 'param2') }">
        Click me
    </button>

    这样,KO就会调用这个匿名函数,里面会执行viewModel.myFunction(),并且传进了'param1' 和'param2'参数。

    访问事件源对象

     有些情况,你可能需要使用事件源对象,Knockout会将这个对象传递到你函数的第一个参数:

    复制代码
    <button data-bind="click: myFunction">
        Click me   event
    </button>
    <script type="text/javascript" src="~/Scripts/knockout-2.3.0.debug.js"></script> 
    <script type="text/javascript">
        var viewModel = {
            numberOfClicks: ko.observable(0),
            incrementClickCounter: function() {
                var previousCount = this.numberOfClicks();
                this.numberOfClicks(previousCount + 1);
            },
            myFunction: function (event) {
                //////
            }
        };
        ko.applyBindings(viewModel);
    </script>
    复制代码

    如果你需要的话,可以使用匿名函数的第一个参数传进去,然后在里面调用:

    <button data-bind="click: function(event) { viewModel.myFunction(event, 'param1', 'param2') }">
        Click me
    </button>

    这样,KO就会将事件源对象传递给你的函数并且使用了。

    允许执行默认事件

    默认情况下,Knockout会阻止冒泡,防止默认的事件继续执行。例如,如果你点击一个a连接,在执行完自定义事件时它不会连接到href地址。这特别有用是因为你的自定义事件主要就是操作你的view model,而不是连接到另外一个页面。

    当然,如果你想让默认的事件继续执行,你可以在你click的自定义函数里返回true。

    防止事件冒泡

    默认情况下,Knockout允许click事件继续在更高一层的事件句柄上冒泡执行。例如,如果你的元素和父元素都绑定了click事件,那当你点击该元素的时候两个事件都会触发的。如果需要,你可以通过额外的绑定clickBubble来禁止冒泡。例如:

    <div data-bind="click: myDivHandler">
        <button data-bind="click: myButtonHandler, clickBubble: false">
            Click me
        </button>
    </div>

    默认情况下,myButtonHandler会先执行,然后会冒泡执行myDivHandler。但一旦你设置了clickBubble为false的时候,冒泡事件会被禁止。

  • 相关阅读:
    042.hiveLEFT SEMI JOIN 、 left anti join、inner join、full join
    032.hive rollup 、 with cube 、 grouping sets
    023.linuxshell抽取文本中某几行插入到另一个文
    041.mysql查询mysql元数据来格式化datax同步脚本,查询语句、拼接的json语句dataxmysql到hive
    33.hivecollect_set组合数组(数组内去重) 、array_contains 判断数组内是否又某个值返回布尔类型、concat_ws
    vue vant组件库 card组件 修改 thumb属性的图片 参数后不及时刷新解决
    idea 警告 The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 解决
    尺子控件WinForm控件开发系列
    自定义形状按钮WinForm控件开发系列
    code ERESOLVE, ERESOLVE could not resolve
  • 原文地址:https://www.cnblogs.com/zxbzl/p/6004098.html
Copyright © 2020-2023  润新知