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

Knockout应用开发的模板绑定是什么

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Knockout应用开发的模板绑定是什么

本篇内容主要讲解“Knockout应用开发的模板绑定是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Knockout应用开发的模板绑定是什么”吧!

目的

template绑定通过模板将数据render到页面。模板绑定对于构建嵌套结构的页面非常方便。默认情况, Knockout用的是流行的jquery.tmpl模板引擎。使用它的话,需要在安装页面下载和引用jquery.tmpl和jQuery框架。或者你也可以集成其它的模板引擎(虽然需要了解Knockout 内部知识才行)。

例子

<div data-bind='template: "personTemplate"'> </div> <script id='personTemplate' type='text/html'>     ${ name } is ${ age } years old      <button data-bind='click: makeOlder'>Make older</button> </script>    <script type='text/javascript'>     var viewModel = {          name: ko.observable('Bert'),          age: ko.observable(78),          makeOlder: function () {              this.age(this.age() +1);          }      };      ko.applyBindings(viewModel);  </script>

当引用的observable(dependent observable)数据改变的时候,Knockout会自动重新render模板。在这个例子里,每次点击button的时候都会重新render模板。

语法

你可以使用任何你模板引擎支持的语法。jquery.tmpl执行如下语法:

◆ ${ someValue } &mdash; 参考文档

◆ {{html someValue}} &mdash; 参考文档

◆ {{if someCondition}} &mdash; 参考文档

◆ {{else someCondition}} &mdash; 参考文档

◆ {{each someArray}} &mdash; 参考文档

和observable数组一起使用{{each}}

当然使用{{each someArray}}的时候,如果你的值是observableArray,你必须使用JavaScript类型的基础数组类型{{each myObservableArray()}},而不是{{each myObservableArray}}。

参数

主参数

语法快速记忆:如果你声明的仅仅是字符串(上个例子),KO会使用模板的ID来render。应用在模板上的数据是你的整个view model对象(例如ko.applyBindings 绑定的对象)。

更多控件,你可以传带有如下属性的JavaScript对象:

name(必选项) &mdash; 需要render的模板ID &ndash; 参考 注5 如何使用function函数声明ID。

data(可选项) &mdash; 需要render到模板的数据。如果你忽略整个参数,KO将查找foreach参数,或者是应用整个view model对象。

foreach(可选项) &mdash; 指定KO按照“foreach”模式render模板 &ndash; 参考 注3。

afterAdd或beforeRemove(可选项) &mdash; 在foreach模式下使用callback函数。

templateOptions(可选项) &mdash; 在render模板的时候,传递额外数据以便使用。参考 注6。

传递多个参数的例子:

<div data-bind='template: { name: "personTemplate", data: someObject }'> </div>

注1:Render嵌套模板

因为在模板里使用的是data-bind属性来声明的,所以嵌套模板你可以再次使用data-bind='template: ...',在上层模板的元素里。

这比模板引起的原生语法好用多了(例如jquery.tmpl里的{{tmpl}})。Knockout语法的好处在于可以在每层模板的跟着相关的依赖值,所以如果依赖改变了,KO将只会重新render依赖所在的那个模板。这将很大地改善了性能。

注2:${ val }和<span data-bind='text: val'></span>有何不同?

当你在模板内部使用data-bind属性的时候,KO是单独为这个绑定单独跟踪依赖项的。当model改变的时候,KO只会更新绑定的元素以及子元素而不需要重新render整个模板。所以如果你声明这样的代码是<span data-bind='text: someObservableValue'></span>,当 someObservableValue改变的时候,KO将只是简单地更新<span>元素的text值而不需要重新render整个模板。

不过,如果模板内部使用的observable值(例如${ someObservableValue }),如果这个observable值改变了,那KO将重新render整个模板。

这就是说,很多情况下<span data-bind='text: someObservableValue'></span>性能要比${ someObservableValue }要好,因为值改变的话不会影响临近元素的状态。不过${ someObservableValue }语法比较简洁,如果你的模板比较小的话,还是更合适的,不会带来大的性能问题。

注3:使用foreach

如果需要为集合里的每一个item render一次模板,有2种方式:

你可以使用模板引擎里的原生“each”语法,对jquery.tmpl来说就是用{{each}}语法迭代数组。

另外一种方式就是用Knockout的foreach模式来render。

例子:

<div data-bind='template: { name: "personTemplate",                              foreach: someObservableArrayOfPeople }'> </div>

foreach模板模式的好处是:

◆ 当往你的collection集合里添加新item项的时候,KO只会对这个新item进行render模板,并且将结果附加到现有的DOM上。

◆ 当从collection集合里删除item的时候,KO将不会重新render任何模板,而只是简单地删除相关的元素。

◆ KO允许通过自定义的方式声明afterAdd和beforeRemove的callback函数添加/删除DOM元素。然后这个callback会在删除元素的时候进行一些动画或者其它操作。

与原生的each不同之处是:在改变之后,模板引擎强制重新render模板里所有的内容,因为它根本就不关注KO里所谓的依赖跟踪内容。

关于使用foreach模式的例子,参考grid editor和animated transitions。

注4:使用afterRender选项

有时候,你需要在模板生成的DOM元素上深度定义逻辑。例如,你可能想再模板输出的时候进行截获,然后在render的元素上允许jQuery UI命令(比如date picker,slider,或其它)。

你可以使用afterRender选项,简单声明一个function函数(匿名函数或者view model里的函数),在render或者重新render模板之后Knockout会重新调用它。如果你使用的是foreach,那在每个item添加到observable数组之后, Knockout会立即调用afterRender的callback函数。例如,

<div data-bind='template: { name: "personTemplate",                              data: myData,                              afterRender: myPostProcessingLogic }'> </div>

&hellip; 在view model里声明一个类似的函数(例如,对象包含myData):

viewModel.myPostProcessingLogic = function (elements) {      // "elements" is an array of DOM nodes just rendered by the template      // You can add custom post-processing logic here  }

注5:动态决定使用哪个模板

有时候,你可能需要根据数据的状态来决定使用哪个模板的ID。可以通过function的返回ID应用到name选择上。如果你用的是foreach模板模式, Knockout会对每个item执行function(将item作为参数)从而将返回值作为ID,否则,该function接受的参数是整个 data option或者是整个view model。

例子:

<ul data-bind='template: { name: displayMode,                             foreach: employees }'> </ul>   <script type='text/javascript'> var viewModel = {      employees: ko.observableArray([          { name: "Kari", active: ko.observable(true) },          { name: "Brynn", active: ko.observable(false) },          { name: "Nora", active: ko.observable(false) }      ]),      displayMode: function (employee) {          return employee.active() ?"active" : "inactive";          // Initially "Kari" uses the "active" template, while the others use "inactive"      }  };   // ... then later ...  viewModel.employees()[1].active(true);  // Now "Brynn" is also rendered using the "active" template.  </script>

如果你的function引用的是observable值,那当这些值改变的时候,绑定的值会随着改变的。这将导致相应的模板重新render。

注6:使用templateOptions传递额外的参数

如果你在绑定模板的时候需要传入额外的数据的话,你可以使用templateOptions对象来传递这些值。这可以帮助你通过一些 不属于view model过滤条件或者字符来重用模板。另外一个好处是用在范围控制,你可以引用通过你的模板访问怒道的数据。

例子,

<ul data-bind='template: { name: "personTemplate",                             foreach: employees,                             templateOptions: { label: "Employee:",                                                selectedPerson: selectedEmployee } }'> </ul>   <script id='personTemplate' type='text/html'>     <div data-bind="css: { selected: $data === $item.selectedPerson()" }">         ${ $item.label } <input data-bind="value: name" />     </div> </script>

在整个例子里,personTemplate有可能都使用employee和自定义对象。通过templateOptions我们可以传递一个字符label和当前已选择项作为selectedPerson来控制style。在jquery.tmpl模板里,这些值可以通过访问$item对象的属性得到。

注7:模板是被预编译和缓存的

为了***性能,Knockout内嵌模板引擎jquery.tmpl会利用自身的功能对你的模板进行预编译成可执行的JavaScript代码,然后从编译流程里缓存输出。这将使模板更快更加具有可执行性,尤其是是使用foreach循环来render相同模板的时候。

一般情况你不会注意到这个,所以经常会忘记。不过,当你在某种原因下通过编程重写模板<script>元素的时候并且该模板之前已经用过一次的话,你的改变不会带来任何render的变化,因为在***次使用的时候已经预编译了并且缓存起来了。(如果这些会带来问题,我们将考虑在KO新版本里提供一个禁用或重设模板缓存的功能,不过好像没有好的原因去动态改变模板<script>元素的内容)。

注8:使用不同的模板引擎

如果你想使用不同的JavaScript模板引擎(或者是因为某些原因你不想在jQuery上使用依赖)。我们可以去为KO来写一个不同的模板引擎,例如,在KO源代码里的jqueryTmplTemplateEngine.js,尽管他是为了支持多个版本的jquery.tmpl而编译。支持一个单独的模板引擎版本相对简单多了。

依赖性

template绑定只能在引用合适的模板引擎情况下才能工作。例如提到的jquery.tmpl引擎。

到此,相信大家对“Knockout应用开发的模板绑定是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

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

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

Knockout应用开发的模板绑定是什么

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

下载Word文档

猜你喜欢

C# WPF数据绑定模板化操作的方法是什么

今天小编给大家分享一下C# WPF数据绑定模板化操作的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体实例代码如
2023-06-26

Vue的MVVM模板语法和数据绑定怎么使用

本篇内容介绍了“Vue的MVVM,模板语法和数据绑定怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. Vue概述Vue官网英文官网
2023-06-22

轻量应用服务器绑定域名是什么

轻量应用服务器绑定域名的过程类似于PHP中的bind,它将Python代码与目标域名绑定。在绑定时,您需要向控制台提供要绑定的文件和目录,然后将它们传递到绑定服务器上。在绑定时,Python解释器会将您的请求解析为服务器可用的域名列表,并将目标域名映射到要绑定的文件或目录中。然后,您可以使用domainname函数将该域名映射到绑定服务器上的一个名称,以便应用服务器可以访问。需要注意的是,轻
2023-10-26

girdview空模板的作用是什么

GridView空模板的作用是用于在数据源为空时显示一个空白区域,以提供用户友好的界面反馈。当GridView控件的数据源中没有数据时,可以通过设置EmptyDataTemplate属性来指定一个空模板,用于在界面上显示一段自定义的内容,如
2023-08-20

JSP应用开发的特点是什么

这篇文章主要介绍“JSP应用开发的特点是什么”,在日常操作中,相信很多人在JSP应用开发的特点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JSP应用开发的特点是什么”的疑惑有所帮助!接下来,请跟着小编
2023-06-17

jquery绑定事件的作用是什么

本篇内容介绍了“jquery绑定事件的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jquery绑定事件的作用:将普通的事件eve
2023-07-05

linux绑定网卡的作用是什么

在Linux操作系统中,绑定网卡的作用是将多个网卡(NIC)合并成一个逻辑接口,以提高网络性能和可靠性。以下是绑定网卡的几个主要作用:负载均衡(Load Balancing):将网络流量均匀地分配到多个网卡上,以提高网络带宽的利用率和处理能
2023-10-23

.NET程序员应该熟悉的开发模式是什么

这篇文章给大家介绍.NET程序员应该熟悉的开发模式是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我们总会有这样一个经验:一个系统最不容易也最不应该变化的部分是领域逻辑,最容易变化也最应该变化的是数据的呈现方式。在
2023-06-17

轻量应用服务器绑定域名是什么意思啊怎么解绑

轻量应用服务器绑定域名通常是指在应用服务器上添加一个域名,以便客户可以通过该域名访问应用程序,而无需重新绑定域名。解绑应用程序通常是指释放绑定的域名,而不再使用域名进行访问。通常情况下,轻量应用服务器绑定域名可以帮助客户更方便地访问应用程序,同时也可以提高应用服务器的可用性和稳定性。例如,如果一个企业使用轻量应用服务器绑定了一个域名,那么在访问应用程序时,用户可以直接通过域名访问应用程序,而不
2023-10-26

轻量应用服务器绑定域名是什么意思

轻量应用服务器绑定域名可以帮助您的应用程序与其他应用程序进行通信,例如与电子邮件地址相关联。您可以使用轻量应用服务器绑定域名,来确保访问者在访问您的应用程序时看到正确的信息,例如用户名、密码或电子邮件地址。绑定域名的工作原理是,轻量应用服务器将应用程序与域名进行映射,使得轻量应用服务器上的每个用户可以使用相同的域名访问您的应用程序。例如,如果您的应用程序使用www.example.com作为主
2023-10-26

thinkphp默认用的模板引擎是什么

今天小编给大家分享一下thinkphp默认用的模板引擎是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。thinkphp默
2023-07-02

C++可变参数模板的展开方式是什么

这篇文章主要讲解了“C++可变参数模板的展开方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++可变参数模板的展开方式是什么”吧!可变参数模板(variadic templates
2023-06-29

微信小程序定制与模板的区别是什么

本篇内容主要讲解“微信小程序定制与模板的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序定制与模板的区别是什么”吧!微信小程序,基于微信运行的手机应用。由于是基于微信运行的,而
2023-06-27

轻量应用服务器绑定域名是什么意思呀

轻量应用服务器绑定域名是指将一个域名与轻量级应用服务器上的应用程序进行关联,使得用户可以通过该域名来访问该应用程序。通常情况下,轻量级应用服务器是指一种资源占用较少、配置简单、易于部署和管理的服务器,例如Nginx、Apache等。通过将域名与轻量级应用服务器进行绑定,可以使得用户更加方便地访问应用程序,同时也可以提高应用程序的可用性和稳定性。在绑定域名时,需要将域名解析到轻量级应用服务器的IP地
2023-10-26

轻量应用服务器绑定域名是什么意思啊

轻量应用服务器绑定域名是指将一个域名与轻量级应用服务器上的应用程序进行关联,使得用户可以通过该域名来访问该应用程序。通常情况下,轻量级应用服务器是指一种资源占用较少、配置简单、易于部署和管理的服务器,例如Nginx、Apache等。当你在轻量级应用服务器上部署了一个应用程序后,你需要将该应用程序的访问地址与一个域名进行绑定,这样用户就可以通过该域名来访问该应用程序。这种方式可以使得用户更加方便地访
2023-10-26

Node模块化开发的方法是什么

本文小编为大家详细介绍“Node模块化开发的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node模块化开发的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、介绍1. 什么是模块化开发模块
2023-07-05

Linux应用程序开发过程是什么

Linux应用程序开发过程通常包括以下步骤:1. 确定需求:明确应用程序的功能和目标,并确定用户需求。2. 设计架构:确定应用程序的结构和模块,并设计相应的架构。3. 编写代码:根据设计的架构,使用适当的编程语言编写代码。4. 调试和测试:
2023-09-01

编程热搜

目录