zoukankan      html  css  js  c++  java
  • 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的时候,冒泡事件会被禁止。

  • 相关阅读:
    结队完成-连续最大子数组和
    一、数据库的基础简介
    十六、Shell之expect自动化交互程
    十五、Shell之数组
    十四、循环控制
    十三、Shell之select语句
    Linux系统产生随机数的6种方法
    十二、Shell之for循环
    十一、Shell之while&&until循环
    Shell补充之后台执行脚本程序
  • 原文地址:https://www.cnblogs.com/aehyok/p/3369011.html
Copyright © 2011-2022 走看看