Knockout observables提供了支持读取/写入值并在值改变时通知订阅者所需的基本功能. 但在某些情况下,您可能希望向可观察者添加其他功能. 这可能包括通过在可观察者前面放置一个可写的计算可观察符来向可观察或截取写入添加额外的属性. 敲除扩展器提供了一种简单和灵活的方式来对可观察者进行这种类型的扩充. 如何创建扩展器 创建扩展器涉及向ko.extenders对象添加一个函数. 函数接受observable本身作为第一个参数和第二个参数中的任何选项. 然后它可以返回observable…
注意:这个速率限制API是在Knockout 3.1.0中添加的. 通常,更改的observable立即通知其订户,以便依赖于observable的任何计算的observable或绑定都会同步更新. 但是,rateLimit扩展器会导致observable在指定的时间段内抑制和延迟更改通知. 因此,速率限制的observable异步更新依赖关系. 速率限制扩展器可以应用于任何类型的可观察量,包括可观察数组和计算可观察量. 速率限制的主要用例是: 使事情在一定延迟后作出反应 将多个更改合并到单个更…
注意:本文档适用于Knockout 3.4.0及更高版本. ko.onError Knockout包装内部异步调用,并在抛出原始错误之前查找可选的ko.onError回调以执行(如果遇到异常). 这使您有机会运行自定义逻辑,例如将错误传递到日志记录模块. 此外,由于原始调用被包装在try / catch中,传递给ko.onError的错误包含一个堆栈属性,在使用window.onerror处理错误时,这在许多浏览器中不是真的. 此功能适用于以下上下文中的错误: 作为文本输入和值绑定的一部分进行的…
注意:本文档适用于Knockout 3.4.0及更高版本. Knockout的微任务队列 Knockout的微任务队列支持调度任务尽可能快地运行,同时仍然是异步的,努力安排它们在发生I / O,回流或重绘之前发生. 它在内部用于Knockout组件以维护异步行为,以及用于安排可观察量的延迟更新. ko.tasks.schedule(function () { // ... }); 这将把提供的回调函数添加到微任务队列. Knockout包括快速任务队列,以FIFO顺序运行任务,直到队列为空. 当…
有时,您可能会通过向Knockout的核心值类型添加新功能来寻找机会来简化您的代码. 您可以在以下任何类型中定义自定义函数: 因为继承,如果你附加一个函数到ko.subscribable,它将可用于所有其他的. 如果你附加一个函数到ko.observable,它将被ko.observableArray继承而不是ko.computed继承. 要附加自定义函数,请将其添加到以下可扩展性点之一: ko.subscribable.fn ko.observable.fn ko.observableArra…
在大多数情况下,数据绑定属性提供了一种干净和简洁的方式来绑定到视图模型. 然而,事件处理是一个常常会导致详细数据绑定属性的领域,因为匿名函数通常是传递参数的推荐技术. 例如: <a href="#" data-bind="click: function() { viewModel.items.remove($data); }"> remove </a> 作为替代,Knockout提供了两个帮助函数,它们允许您标识与DOM元素关联的数据: ko…
.example { display: inline-block; padding: 1em; margin-right: 2em; background: #F6F6EF; } 注意:本文档适用于Knockout 3.4.0及更高版本. 对于先前版本,"延迟更新"插件提供类似的支持. 在复杂的应用程序中,由于具有多个交织的依赖关系,更新单个observable可能会触发计算的observable,手动订阅和UI绑定更新的级联. 如果将不必要的中间值推送到视图或产生额外的计算的可观察评…
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天使用的格式. 加载或保存数据 Knockout不强制您使用任何一种特殊技术来加载或保存数据. 您可以使用任何适合您所选择的服务器端技术的机制. 最常用的机制是jQuery的Ajax方法,例如getJSON,post和ajax. 您可以从服务器获取数据: $.getJSON("/some/url&qu…
组件绑定将指定的组件注入到元素中,并且可选地将参数传递给它. 本节目录 一个例子 API 组件生命周期 备注1:仅限模板组件 备注2:使用没有容器元素的组件 备注3:将标记传递给组件 处置和内存管理 一个例子 First instance, without parameters Second instance, passing parameters ko.components.register('message-editor', { viewModel: function(params) { t…
计算监控属性(Computed Observables) 如果你有一个监控属性firstName,和另一个lastName,你要显示的全名?可以使用计算监控属性来实现-它依赖于一个或多个其他监控属性,每当这些依赖关系的监控属性改变时将会自动更新计算监控属性. 例如,下面的视图模型: function AppViewModel() { this.firstName = ko.observable('Bob'); this.lastName = ko.observable('Smith'); } 可…