我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Knockout应用开发中如何创建自定义绑定

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Knockout应用开发中如何创建自定义绑定

这篇文章给大家介绍Knockout应用开发中如何创建自定义绑定,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创建自定义绑定

你可以创建自己的自定义绑定,没有必要非要使用内嵌的绑定(像click,value等)。你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定。例如,你可以在form表单里自定义像grid,tabset等这样的绑定。

重要:以下文档只应用在Knockout 1.1.1和更高版本,Knockout 1.1.0和以前的版本在注册API上是不同的。

注册你的绑定

添加子属性到ko.bindingHandlers来注册你的绑定:

ko.bindingHandlers.yourBindingName = {      init: function(element, valueAccessor, allBindingsAccessor, viewModel) {          // This will be called when the binding is first applied to an element          // Set up any initial state, event handlers, etc. here      },       update: function(element, valueAccessor, allBindingsAccessor, viewModel) {          // This will be called once when the binding is first applied to an element,          // and again whenever the associated observable changes value.          // Update the DOM element based on the supplied values here.      }  };

 然后就可以在任何DOM元素上使用了:

<div data-bind="yourBindingName: someValue"> </div>

注:你实际上没必要把init和update这两个callbacks都定义,你可以只定义其中的任意一个。

update 回调

当管理的observable改变的时候,KO会调用你的update callback函数,然后传递以下参数:

◆ element &mdash; 使用这个绑定的DOM元素

◆ valueAccessor &mdash;JavaScript函数,通过valueAccessor()可以得到应用到这个绑定的model上的当前属性值。

◆ allBindingsAccessor &mdash;JavaScript函数,通过allBindingsAccessor ()得到这个元素上所有model的属性值。

◆ viewModel &mdash; 传递给ko.applyBindings使用的 view model参数,如果是模板内部的话,那这个参数就是传递给该模板的数据。

例如,你可能想通过 visible绑定来控制一个元素的可见性,但是你想让该元素在隐藏或者显示的时候加入动画效果。那你可以自定义自己的绑定来调用jQuery的slideUp/slideDown 函数:

ko.bindingHandlers.slideVisible = {      update: function(element, valueAccessor, allBindingsAccessor) {          // First get the latest data that we're bound to          var value = valueAccessor(), allBindings = allBindingsAccessor();                   // Next, whether or not the supplied model property is observable, get its current value          var valueUnwrapped = ko.utils.unwrapObservable(value);           // Grab some more data from another binding property          var duration = allBindings.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      }  };

然后你可以像这样使用你的绑定:

<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>

当然,看来可能代码很多,但是一旦你创建了自定义绑定,你就可以在很多地方重用它。

init 回调

Knockout在DOM元素使用自定义绑定的时候会调用你的init函数。init有两个重要的用途:

◆ 为DOM元素设置初始值

◆ 注册事件句柄,例如当用户点击或者编辑DOM元素的时候,你可以改变相关的observable值的状态。

KO会传递和update回调函数一样的参数。

继续上面的例子,你可以像让slideVisible在页面***次显示的时候设置该元素的状态(但是不使用任何动画效果),而只是让动画在以后改变的时候再执行。你可以这样来做:

ko.bindingHandlers.slideVisible = {      init: function(element, valueAccessor) {          var value = ko.utils.unwrapObservable(valueAccessor());          // Get the current value of the current property we're bound to          $(element).toggle(value);          // jQuery will hide/show the element depending on whether "value" or true or false      },       update: function(element, valueAccessor, allBindingsAccessor) {          // Leave as before      }  };

这就是说giftWrap的初始值声明的是false(例如giftWrap: ko.observable(false)),然后让初始值会让关联的DIV隐藏,之后用户点击checkbox的时候会让元素显示出来。

DOM事件之后更新observable值

你已经值得了如何使用update回调,当observable值改变的时候,你可以更新相关的DOM元素。但是其它形式的事件怎么做呢?比如当用户对某个DOM元素有某些action操作的时候,你想更新相关的observable值。

你可以使用init回调来注册一个事件句柄,这样可以改变相关的observable值,例如,

ko.bindingHandlers.hasFocus = {       init: function (element, valueAccessor) {          $(element).focus(function () {              var value = valueAccessor();              value(true);          });           $(element).blur(function () {              var value = valueAccessor();              value(false);          });      },       update: function (element, valueAccessor) {          var value = valueAccessor();          if (ko.utils.unwrapObservable(value))              element.focus();          else              element.blur();      }  };

现在你可以通过hasFocus绑定来读取或者写入这个observable值了:

<p>Name: <input data-bind="hasFocus: editingName"/></p> <!-- Showing that we can both read and write the focus state --> <div data-bind="visible: editingName">You're editing the name</div> <button data-bind="enable: !editingName(), click:function() { editingName(true) }">Edit name</button>  <script type="text/javascript">     var viewModel = {          editingName: ko.observable()      };      ko.applyBindings(viewModel);  </script>

关于Knockout应用开发中如何创建自定义绑定就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Knockout应用开发中如何创建自定义绑定

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Angular中如何自定义创建指令

小编给大家分享一下Angular中如何自定义创建指令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!指令介绍在 Angular 中有三种类型的指令:组件,有模板的指
2023-06-14

如何用 Golang 创建自定义时区?

要在 golang 中创建自定义时区,可以使用 time.fixedzone 函数或 time.newfixedzone 函数。time.fixedzone 函数用于修改时区偏移,而 time.newfixedzone 函数用于修改时区偏移
如何用 Golang 创建自定义时区?
2024-05-22

如何在Prometheus中创建自定义指标

要在Prometheus中创建自定义指标,您需要遵循以下步骤:创建一个用于暴露指标的应用程序或服务。您可以使用Prometheus客户端库来帮助您在应用程序中实现指标暴露的功能。在您的应用程序中定义您想要暴露的自定义指标,并在适当的地方将其
如何在Prometheus中创建自定义指标
2024-03-04

C++ 函数如何帮助开发者创建自定义 GUI 组件?

c++++ 函数可用于创建自定义 gui 组件。通过定义函数、处理 gui 任务并从主应用程序调用函数,开发人员可以创建自定义组件。优点包括可复用性、代码清晰度和可扩展性。实战案例展示了在 qt 中使用函数创建自定义按钮组件。C++ 函数:
C++ 函数如何帮助开发者创建自定义 GUI 组件?
2024-04-25

如何在 Laravel 中创建自定义 PHP 函数?

在 laravel 中创建自定义 php 函数的步骤如下:创建函数文件(例如 myhelper.php)并定义函数。在 app.php 中将函数命名空间添加到 providers 数组。创建服务提供程序类(例如 myhelperservic
如何在 Laravel 中创建自定义 PHP 函数?
2024-04-23

Xunsearch搜索的自定义分词器开发与应用(如何为Xunsearch开发自定义的分词器?)

Xunsearch中自定义分词器该文章介绍了如何开发和使用Xunsearch中的自定义分词器。自定义分词器允许用户为特定的语言、方言或专业领域创建定制化文本分词处理,以增强搜索结果的准确性和相关性。文章具体讲述了分词器开发步骤、分词器应用和高级特性,并给出了应用示例,如中文分词、关键词提取、地理搜索和专业领域搜索。
Xunsearch搜索的自定义分词器开发与应用(如何为Xunsearch开发自定义的分词器?)
2024-04-02

如何使用 PHP 创建自定义函数库?

在 php 中创建自定义函数库的步骤为:创建函数文件,例如 myfunctions.php,并在其中定义函数。使用 require 或 include 语句将函数库文件包含到 php 脚本中。加载函数库后,即可使用其函数,例如 greet(
如何使用 PHP 创建自定义函数库?
2024-04-10

如何在Zabbix中创建自定义报警脚本

要在Zabbix中创建自定义报警脚本,您需要按照以下步骤操作:创建脚本: 首先,在Zabbix服务器或代理上创建一个脚本文件,该脚本文件将用于在触发报警时执行自定义操作。确保脚本具有执行权限。定义动作: 登录到Zabbix Web界面,转到
如何在Zabbix中创建自定义报警脚本
2024-03-13

如何在Prometheus系统中创建自定义指标

要在Prometheus系统中创建自定义指标,您需要执行以下步骤:创建一个新的指标定义文件,通常使用PromQL语言编写。您可以使用文本编辑器创建一个以.prom为后缀的文件,该文件包含新指标的定义和计算规则。将指标定义文件保存到Prome
如何在Prometheus系统中创建自定义指标
2024-03-04

如何使用maven自定义插件开发

这篇文章主要介绍了如何使用maven自定义插件开发的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用maven自定义插件开发文章都会有所收获,下面我们一起来看看吧。Maven 插件的命名规范一般来说,我们会
2023-07-02

如何在Oracle中创建用户自定义变量类型

在Oracle数据库中,您可以使用对象关系型数据库(ORDBMS)功能创建用户自定义变量类型首先,确保您已经安装了Oracle数据库并具有适当的权限。打开SQL*Plus或其他支持的工具,连接到您的Oracle数据库实例。创建一个新的用户自
如何在Oracle中创建用户自定义变量类型
2024-08-27

Spring开发中如何实现自定义标签

今天就跟大家聊聊有关Spring开发中如何实现自定义标签,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Spring框架是现在Java最流行的开源框架之一,并且Spring下的各种子项
2023-05-31

Android开发中如何自定义加载动画

这篇文章主要为大家展示了“Android开发中如何自定义加载动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android开发中如何自定义加载动画”这篇文章吧。一、demo简介1.效果展示如下
2023-06-29

Android开发中如何自定义editText下划线

这篇文章主要介绍“Android开发中如何自定义editText下划线”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android开发中如何自定义editText下划线”文章能帮助大家解决问题。效果
2023-07-05

Android应用开发中自定义ViewGroup的究极攻略

支持margin,gravity以及水平,垂直排列 最近在学习android的view部分,于是动手实现了一个类似ViewPager的可上下或者左右拖动的ViewGroup,中间遇到了一些问题(例如touchEvent在onIntercep
2022-06-06

编程热搜

目录