上次我们通过《Knockoutjs实战开发:属性监控(Observables)和依赖跟踪(Dependency tracking )》一文对Knockoutjs的属性监控有了初步的了解,在昨天的文章中我们只是对某个属性进行监控介绍,在Knockoutjs中也提供了数组的监控,下面我们首先对数组的监控作下介绍,然后再开始介绍Knockoutjs的属性绑定的控制文本和外观。
一、数组监控(Observable Arrays)
如果我们想要使用Knockoutjs表示多个值的话我们可以使用数组监控(Observable Arrays)来表示,形式如下:
var myObservableArray = ko.observableArray(); myObservableArray.push('Some value');
在第一行我们实例化了一个数组,在第二行我们向此数组中添加了一条记录,正如我们看到的那样,往数组中添加数组我们使用push方法。当然我们也可以在初始化数组的时候为其赋初值,代码如下:
var anotherObservableArray = ko.observableArray([ { name: "Bungle", type: "Bear" }, { name: "George", type: "Hippo" }, { name: "Zippy", type: "Unknown" } ]);
以上的代码我们在定义一个数组的同时为其赋了初值,这样我们就可以通过以下的方法进行数组的访问了:
alert('The length of the array is ' + myObservableArray().length); alert('The first element is ' + myObservableArray()[0]);
在第一行的代码中我们使用了数组的length属性来求得数组的长度,在第二行的代码中我们取得了数组的第一个值。
Knockoutjs数组常用的方法如下:
(1)、myObservableArray.push('Some new value')
:增加一个新的元素
(2)、myObservableArray.pop()
:删除一个元素,并返回其值
(3)、myObservableArray.unshift('Some new value')
:在数组的开始处增加一个新的元素
(4)、myObservableArray.shift()
:删除数组的第一个元素,并返回其值
(5)、myObservableArray.reverse()
:反转数组的顺序
(6)、myObservableArray.sort()
:数组排序。排序规则可以由用户自己定义也可以使用默认, 默认情况下按照字母顺序或者数字的顺序进行排序。自己定义排序规则时需要接收数组 中的两个元素,并且需要返回一个数值,当此值小于0时表示第一个元素较小,当此值大于0时,表示第二个元素较小,当等于0时表示两个元素相等。示例如 下:
myObservableArray.sort(function(left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })
(7)、myObservableArray.splice()
:数组截取。例如:myObservableArray.splice(1, 3)
,代表从数组的第一个元素开始,截取三个元素,并且将他们作为数组返回。
二、控制文本和外观(Controlling text and appearance)
(1)、Visible
binding
此绑定可以控制某个控件或者内容什么时候该显示,什么时候不该显示。比如:
<div data-bind="visible: shouldShowMessage"> You will see this message only when "shouldShowMessage" holds a true value. </div> <script type="text/javascript"> var viewModel = { shouldShowMessage: ko.observable(true) }; viewModel.shouldShowMessage(false); viewModel.shouldShowMessage(true); ko.applyBindings(viewModel); </script>
当shouldShowMessage为true时会显示div的文本,反则不显示。并且当shouldShowMessage的值改变时,div的显示与否也会自动的改变。我们也可以使用方法来控制此组件是否显示:
<div data-bind="visible: myValues().length > 0"> You will see this message only when 'myValues' has at least one member. </div> <script type="text/javascript"> var viewModel = { myValues: ko.observableArray([]) // Initially empty, so message hidden }; viewModel.myValues.push("some value"); // Now visible ko.applyBindings(viewModel); </script>
上例通过数组myValues的大小来控制div组件是否显示,当长度大于0时div中的内容才会加以显示,否则不会显示。
(2)、text binding
文本绑定我们在前面一直在用,这里我们再看一下他的代码:
Today's message is: <span data-bind="text: myMessage"></span> <script type="text/javascript"> var viewModel = { myMessage: ko.observable() // Initially blank }; viewModel.myMessage("Hello, world!"); // Text appears ko.applyBindings(viewModel); </script>
此处使用text binding来控制span中的文本内容。当然我们在使用text binding时也可以绑定组合属性的,代码如下:
The item is <span data-bind="text: priceRating"></span> today. <script type="text/javascript"> var viewModel = { price: ko.observable(24.95) }; viewModel.priceRating = ko.computed(function() { return this.price() > 50 ? "expensive" : "affordable"; }, viewModel); ko.applyBindings(viewModel); </script>
此处将组合属性priceRating绑定到了span上并加以显示逻辑可以使用以下代码替换:
The item is <span data-bind="text: price() > 50 ? 'expensive' : 'affordable'"></span> today.
将逻辑判断放到data-bind中进行,少定义了组合属性priceRating。
(3)、HTML Binding
此功能类似我们的innerHTML功能。代码如下:
<div data-bind="html: details"></div> <script type="text/javascript"> var viewModel = { details: ko.observable() // Initially blank }; viewModel.details("<em>For further details, view the report <a href='report.html'>here</a>.</em>"); // HTML content appears ko.applyBindings(viewModel); </script>
但是我们应尽量减少这样的代码,因为这样可能会出现相应的注入,如果非要使用不可的话,一定要在使用之前对输入的内容加以验证。
(4)、CSS Bindings
使用此功能我们可以为我们的组件加上相应的CSS。
<div data-bind="css: { profitWarning: currentProfit() < 0 }"> Profit Information </div> <script type="text/javascript"> var viewModel = { currentProfit: ko.observable(150000) // Positive value, so initially we don't apply the "profitWarning" class }; viewModel.currentProfit(-50); // Causes the "profitWarning" class to be applied ko.applyBindings(viewModel); </script>
(5)、style bindings
使用此功能可以为我们的组件加入相应的style。
<div data-bind="style: { color: currentProfit() < 0 ? 'red' : 'black' }"> Profit Information </div> <script type="text/javascript"> var viewModel = { currentProfit: ko.observable(150000) // Positive value, so initially black }; viewModel.currentProfit(-50); // Causes the DIV's contents to go red ko.applyBindings(viewModel); </script>
(6)、attr bindings
使用此功能可以为相应组件增加对应的属性,比如为<a></a>标签加入href和title等属性:
<a data-bind="attr: { href: url, title: details }"> Report </a> <script type="text/javascript"> var viewModel = { url: ko.observable("year-end.html"), details: ko.observable("Report including final year-end statistics") }; ko.applyBindings(viewModel); </script>
以上示例代码来源于:www.knockoutjs.com
相关推荐
在传统的Knockout.js应用中,ViewModel的属性和视图层的绑定是静态的,开发者必须在编写代码时就定义好所有需要的属性。然而,在一些复杂或动态变化的应用场景中,我们可能无法预先定义好所有属性。 为了应对这种...
**KnockoutJS**,简称KO.js,是一个轻量级的JavaScript库,专注于MVVM(Model-View-ViewModel)设计模式,使得在Web开发中实现数据绑定和动态用户界面变得简单易行。它通过双向数据绑定特性,允许开发者在视图和模型...
通过理解MVVM模式、数据绑定、可观察对象和计算属性等核心概念,开发者可以高效地构建响应式的Web应用程序。中文手册对于国内开发者来说是一份宝贵的资源,它不仅提供了详细的API文档,还包含了许多实践示例和技巧,...
常见的数据绑定类型包括文本绑定、HTML绑定、事件绑定、条件绑定、循环绑定等。例如,`<span data-bind="text: myProperty"></span>` 将会显示`myProperty`的值。 ### 3. 观察者模式 KnockoutJS使用观察者模式实现...
Asp.Net MVC 4 和 KnockoutJS 是两个在Web开发领域广泛应用的技术,它们结合使用能够构建出高效、动态且用户友好的Web应用。Asp.Net MVC 4 是Microsoft推出的一个强大的MVC(Model-View-Controller)框架,用于构建...
全能 jQuery Sparkline 的 KnockoutJS 自定义绑定 依赖 没有凉亭。 项目与 Bower 重生。 扩展选项 TODO:这些可以通过将对象传递给绑定器而不是使用单独的绑定来以更友好的 KnockoutJS 代码样式处理。 时间窗口...
textInput绑定目的 textInput绑定主要用于<input>或者<textarea>元素。他提供了DOM和viewmodel的双向更新。不同于value绑定,textinput绑定是实时更新的。 例如: 源码: <p>Login name: <input ...
KnockoutJS支持多种类型的绑定,如文本绑定、HTML绑定、事件绑定、条件绑定、循环绑定等,使得UI的更新自动化,减少手动DOM操作。 3. ** observable 和 observables数组** 在KnockoutJS中,`observable` 是一种...
KnockoutJS Essentials gives you an insight into the best practices when designing and building MVVM web applications using the KnockoutJS framework. Packed with real-world tasks, this book starts ...
Starting with the installation and configuration of KnockoutJS, this book will describe the ins and outs of working with forms using arrays, nesting, and grids. You will learn about event binding and...
此外,KnockoutJS还提供了丰富的内置绑定,如`text`、`click`和`enable`。你可以使用`text`绑定来更新文本内容,如显示`myItems`数组的计数;使用`click`绑定来指定点击事件处理函数,如添加或删除按钮的点击行为;...
这里,我们使用了 `options` 绑定来填充下拉列表,`value` 绑定来跟踪当前选中的值,`visible` 绑定则根据上级选择的值来控制下级列表的显示和隐藏。 在用户选择省份时,我们需要监听 `selectedProvince` 的变化,...
foreach 绑定不仅限于单独使用,它还可以和其他控制流绑定一起使用,例如 if 和 with,以实现更复杂的动态数据交互和视图更新。这为开发者提供了灵活性,可以根据数据的变化来显示或隐藏某些内容,或者改变绑定的上...
主要的数据绑定类型包括文本绑定、值绑定、事件绑定、可见性绑定等。例如,`<span data-bind="text: myProperty"></span>` 将显示与`myProperty`关联的值。 **2. 观察者模式** KnockoutJS使用观察者模式来实现数据...
接下来,在具体实现中,结合KnockoutJs进行数据绑定和视图模型的定义,使用Bootstrap框架来美化界面,最终实现一个完整的单页面应用程序。开发者可以利用KnockoutJs的依赖项跟踪特性来更新DOM,并且可以使用...
1. **数据绑定**:KnockoutJS的核心在于其强大的数据绑定功能,允许开发者将DOM元素与JavaScript对象的数据属性直接关联。源码中会展示如何使用`text`, `html`, `value`, `if`, `foreach`等不同的数据绑定指令来动态...
KnockoutJS 3.X API是一个介绍KnockoutJS库中API使用的指南,而其第四章则专注于数据控制流,其中特别介绍了if绑定和ifnot绑定这两种强大的数据绑定技术。 if绑定允许开发者根据一个条件表达式的结果来决定是否在...
该插件能够将JSON对象直接映射成KnockoutJS的observable数组和observable属性,极大地简化了数据到视图模型的转换过程。 最后,在HTML中,博主通过@Html.Raw和Newtonsoft.Json.JsonConvert.SerializeObject方法将从...