KnockoutJS教程

KnockoutJS Observables

KnockoutJS 建立在以下 3 个重要概念之上。
Observable 和它们之间的依赖关系跟踪-DOM 元素通过"数据绑定"连接到 ViewModel。他们通过 Observables 交换信息。这会自动处理依赖项跟踪。 UI 和 ViewModel 之间的声明性绑定-DOM 元素通过"数据绑定"概念连接到 ViewModel。 模板化以创建可重复使用的组件-模板化提供了一种创建复杂 Web 应用程序的可靠方法。
我们将在本章中学习 Observables。
顾名思义,当您将 ViewModel 数据/属性声明为 Observable 时,每次对数据的任何修改都会自动反映在使用数据的所有位置。这还包括刷新相关的依赖项。 KO 会处理这些事情,无需编写额外的代码来实现这一点。
使用 Observable,让 UI 和 ViewModel 动态通信变得非常容易。

语法

您只需要使用函数 ko.observable() 声明 ViewModel 属性即可使其可观察。
this.property = ko.observable('value');

示例

让我们看看下面的例子,它演示了 Observable 的使用。
<!DOCTYPE html>
   <head>
      <title>KnockoutJS Observable Example</title>
      <script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js" 
         type = "text/javascript"></script>
   </head>
   
   <body>
      <!--this is called "view" of HTML markup that defines the appearance of UI-->
      <p>Enter your name: <input data-bind = "value: yourName" /></p>
      <p>Hi <strong data-bind = "text: yourName"></strong> Good Morning!!!</p>
      <script>
         <!--this is called "viewmodel". this javascript section defines the data and behavior of UI-->
         function AppViewModel() {
            this.yourName = ko.observable("");
         }
         // Activates knockout.js
         ko.applyBindings(new AppViewModel());
      </script>
   </body>
</html>
下面这行是输入框。可以看出,我们已经使用 data-bind 属性将 yourName 值绑定到 ViewModel。
<p>Enter your name: <input data-bind = "value: yourName" /> <p>
以下行仅打印 yourName 的值。请注意,这里的数据绑定类型是文本,因为我们只是在读取值。
<p>Hi <strong data-bind = "text: yourName"></strong> Good Morning!!!</p>
在下一行中,ko.observable 会密切关注 yourName 变量以查找数据中的任何修改。一旦有修改,相应的地方也会更新为修改后的值。当您运行以下代码时,将出现一个输入框。当您更新该输入框时,新值将在任何使用它的地方得到反映或刷新。
this.yourName = ko.observable("");

输出

让我们执行以下步骤来看看上面的代码是如何工作的-
将上述代码保存在 first_observable_pgm.htm 文件中。 在浏览器中打开此 HTML 文件。 输入名称为 Scott 并观察该名称是否反映在输出中。
数据修改可以从 UI 或 ViewModel 进行。无论数据从何处更改,UI 和 ViewModel 都会保持它们之间的同步。这使它成为一种双向绑定机制。在上面的示例中,当您在输入框中更改名称时,ViewModel 会获得一个新值。当您从 ViewModel 内部更改 yourName 属性时,UI 会收到一个新值。

读写 Observables

下表列出了可以在 Observables 上执行的读写操作。
Sr.No. 读/写操作和语法
1
读取
要读取值,只需调用不带参数的 Observable 属性,例如:AppViewModel.yourName();
2
Write
要在 Observable 属性中写入/更新值,只需在参数中传递所需的值,例如:AppViewModel.yourName('Bob');
3
写入多个
多个 ViewModel 属性可以在单行中使用链接语法更新,例如:AppViewModel.yourName('Bob')。你的年龄(45);

可观察数组

Observable 声明负责单个对象的数据修改。 ObservableArray 与对象集合一起使用。当您处理包含多种类型值并根据用户操作频繁更改其状态的复杂应用程序时,这是一项非常有用的功能。

语法

this.arrayName = ko.observableArray();    // It's an empty array
Observable 数组只跟踪其中的哪些对象被添加或删除。如果单个对象的属性被修改,它不会通知。

第一次初始化

您可以初始化您的数组,同时您可以通过将初始值传递给构造函数来将其声明为 Observable,如下所示。
this.arrayName = ko.observableArray(['scott','jack']);

从可观察数组中读取

您可以按如下方式访问 Observable 数组元素。
alert('The second element is ' + arrayName()[1]);

ObservableArray 函数

KnockoutJS 有自己的一组 Observable 数组函数。它们很方便,因为-
这些功能适用于所有浏览器。 这些函数将自动处理依赖项跟踪。 语法易于使用。例如,要将一个元素插入到数组中,您只需要使用 arrayName.push('value') 而不是 arrayName().push('value')。
以下是各种 Observable Array 方法的列表。
Sr.No. 方法和说明
1 push('value')
在数组末尾插入一个新项目。
2 pop()
从数组中移除最后一项并返回。
3 unshift('value')
在数组的开头插入一个新值。
4 shift()
从数组中移除第一项并返回它。
5 reverse()
反转数组的顺序。
6 sort()
按升序对数组项进行排序。
7 splice(start-index,end-index)
接受 2 个参数-start-index 和 end-index-删除从开始到结束索引的项目并将它们作为数组返回。
8 indexOf('value')
此函数返回所提供参数第一次出现的索引。
9 slice(start-index,end-index)
此方法切出数组的一部分。返回从开始索引到结束索引的项目。
10 removeAll()
删除所有项目并将它们作为数组返回。
11 remove('value')
删除与参数匹配的项目并作为数组返回。
12 remove(function(item) { condition })
移除满足条件的项目并返回它们作为一个数组。
13 remove([值集])
删除与给定值集匹配的项目。
14
destroyAll()
用属性 _destroy 标记数组中的所有项目,值为 true。
15
destroy('value')
搜索与参数相等的项,并用一个特殊属性 _destroy 标记它,值为 true。
16
destroy(function(item) { condition})
查找所有满足条件的项,用属性_destroy 标记它们,并用真值标记它们。
17
destroy([set of values])
查找与给定值集匹配的项目,将它们标记为具有真值的 _destroy。
注意-ObservableArrays 中的 Destroy 和 DestroyAll 函数主要仅供"Ruby on Rails"开发人员使用。
当你使用destroy方法时,相应的项并没有真正从数组中删除,而是通过将它们标记为属性 _destroy并使用 true值来隐藏它们,以便它们不能被 UI 读取。标记为 _destroy 等于 true 的项目稍后在处理 JSON 对象图时被删除。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4