Knockout的顶级特性

Knockout 最棒的一个特点就是它的可扩展性。Knockout 存在大量的扩展点,包含大量的工具来创建我们的应用程序。许多开发者除了 Knockout 核心库之外没有使用任何其他的脚本库 ( 甚至包括 jQuery ) 就创建了非常棒的站点。

Subscribables

在创建我们的库存管理程序的时候,很容易发现在 Knockout 中 Observable 是一个核心对象。在 Observable,ObservableArray 和 Computed Observables 的底层是 Subscribable,Subscribable 是包含三个方法和一个 Subscriptions 数组的对象,这三个方法是:

subscribe:这个方法添加一个订阅到主题对象上,当订阅的主题发出提醒的时候,订阅就会被调用,默认的提醒类型是 change。

notifySubscribers:这个方法调用所有的订阅,并且会传递一个参数到订阅的回调方法中。

extend:这个方法为主题对象添加一个扩展

下面的代码演示了前两个方法的使用,实现了发布和订阅。

var test = ko.observable();  

// create a subscription for the "test-event"  

test.subscribe(function (val) {  

    console.log(val);  

}, test, "test-event");  

test.notifySubscribers("Hello World", "test-event");

Knockout 中订阅的一个很酷的特性是可以混合到任何的 Javascript 对象中,下面的代码演示了在普通代码中使用的方式。

// Dummy Subscribable
function PubSub() {
    // inherit Subscribable
    ko.subscribable.call(this);
}  

// create an instance of our Subscribable
var pubsub = new PubSub();
// make a subscription
var subscription = pubsub.subscribe(function (val) {
    console.log(val);
}, pubsub, 'test-topic');  

pubsub.notifySubscribers("hello world", "test-topic");
// console: "hello world"
// clean up things
subscription.dispose();

在调用可订阅对象的subscribe 方法之后,我们得到了一个 Subscription 对象,通常开发者可以忽略这个 subscribe 方法返回的订阅对象,但是需要注意的是通过这个订阅对象 Subscription ,我们可以释放订阅的回调方法和应用中对于回调的引用,直接调用 dispose 方法就可以确信你的程序不会造成内存的泄露。

现在,你已经理解了 Knockout 的一个核心处理机制,Subscribable,我们将学习 Knockout 如何扩展它的用法在其它的模式。

Observables

Knockout 的 Observable 对象是实现订阅机制的头等对象,也是 Knockout 库中最为简单,也最为强大的部分。下面的代码演示了实现 Observable 的基本思想。

// Very Simple Knockout Observable Implementation
// ko.observable is actually a function factory  

ko.observable = function (initialValue) {  

    // private variable to hold the Observable's value
    var _latestValue = initialValue;  

    // the actual "Observable" function
    function observable() {
        // one or more args, so it's a Write
        if (arguments.length > 0) {
            // set the private variable
            _latestValue = arguments[0];
            // tell any subscribers that things have changed
            observable["notifySubscribers"](_latestValue);
            return this; // Permits chained assignments
        }  

        else { // no args, so it's a Read
            // just hand back the private variable's value
            return _latestValue;
        }
    }  

    // inherit from Subscribable
    ko.subscribable.call(observable);  

    // return the freshly created Observable function
    return observable;
};

这是 Knockout 中 observable 的一个简单实现 ( 真正的实现代码中包含了大量的强壮性处理代码,验证,依赖检测等等 ),从这个实现中可以看到实际上 observable 是一个函数的工厂,当调用这个工厂方法的时候,它生成了一个新的函数。这里实现了一个简单的 set/get API。如果你在不提供参数的情况下调用返回的函数,就会返回 _initialValue ,如果调用的时候提供了一个参数,就会设置 _initialValue ,并且通知所有的订阅。

当你创建事件驱动的程序的时候,Observable 可以得到大量的应用。我们可以创建事件驱动的程序架构,仅仅依赖事件 ( 比如按钮的点击,或者输入元素的变化等等 )而不是过程化的方法。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, knockout
, 方法
, 订阅
, 一个
, subscribe
, observable
Knockout数组
knockout1.5的绿色版、knockout 的使用方法、knockout、knockout.js、knockout 2.0汉化版,以便于您获取更多的相关知识。

时间: 2024-08-04 12:05:33

Knockout的顶级特性的相关文章

Knockout的顶级特性 续

Utilities Knockout 提供了许多可以你开发中使用的工具,你可以在 ko.utils 命名空间中找到它们,我最喜欢的工具如下所示: extend: 这个方法将两个对象合并在一起,调用这个方法之后,会将第二个对象的所有属性,方法合并到第一个对象上. unwrapObservable: 这个方法获取一个属性作为参数,然后返回它的值.比如 Knockout 的 Observable 属性,或者一个简单的属性.这个函数在你希望在运行时获取对象的实际值得时候很有用. 所有的数组工具:Knoc

顶级的JavaScript框架、库、工具及其使用

几乎每隔一个星期,就有一个新的 JavaScript 库席卷网络社区!Web 社区日益活跃.多样,并在多个领域快速成长.想要研究每一个重要的 JavaScript 框架和库,是个不可能完成的任务.接下来,我会分享一些前端开发的最著名和最有影响力的框架和库.下面,就让我们一起来看看,顶级的 JavaScript web 前端框架.库和工具及其使用. 请注意: 如果没有包括你最喜欢的 JavaScript 的框架和库,请多包涵. 请实时更新你的框架和库,最新版本往往有更好的跨浏览器和跨设备支持.可以

什么是Knockout

Knockout 是一个非常棒的脚本库,可是我发现许多人并不了解它,所以,思胜翻译了这本著作. 这一节,我们将会讨论 Knockout 可以做什么,又如何使用它的功能. Knockout 是一个 JavaScript 脚本库 Knockout ,从本质上讲,是一个 JavaScript 脚本库,可以用在网站或者网页的开发中.用来增强脚本的功能以便提供更好的客户体验.默认情况下,除非你调用 Knockout ,否则它什么都不会做.这是区别其他的脚本库或者框架很重要的一点.你可以从这里下载它. Kn

使用Eclipse自动重构特性的方法与原因

为什么重构? 重构是指在不改变程序功能的前提下改变其结构.重构是一项功能强大的技术,但是执行起来需要倍加小心才行.主要的危险在于可能在不经意中引入一些错误,尤其是在进行手工重构的时候更是如此.这种危险引发了对重构技术的普遍批评:当代码不会崩溃的时候为什么要修改它呢? 您需要进行代码重构的原因可能有以下几个:传说中的第一个原因是:需要继承为某个古老产品而开发的年代久远的代码,或者突然碰到这些代码.最初的开发团队已经不在了.我们必须创建增加了新特性的新版本软件,但是这些代码已经无法理解了.新的开发队

Julien Nioche谈Apache Nutch 2的特性及产品路线图

原文地址: http://www.infoq.com/cn/articles/nioche-apache-nutch2 开源的Web搜索框架Apache Nutch的2.1版本已于2012年10月5日发布,该版本的新特性包括:支持一些改进属性,用于更好地配置Solr:更新到各个Gora依赖:可以选择构建弹性搜索中的索引.Nutch既可以运行在单台服务器上,也可以用作大规模抓取平台运行在Hadoop集群上. Nutch框架的2.0版本在经历了两年开发之后,已于今年7月发布,该版本以Apache G

RHEL 7特性说明(七):编译程序及工具

RHEL 7特性说明(七):编译程序及工具 Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证. GCC 工具链 在 Red Hat Enterprise Linux 7.0 中,gcc 工具链是根据 gcc-4.8.x 发行系列开发,并包含大量针对 Red Hat Enterprise Linux 6 的改进和 bug 修复.同样,Red Hat Enterprise Linux

如何像NASA顶级程序员一样编程 —— 10条重要原则

引言: 你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚.更安全.且更容易理解,NASA 的喷气推进实验室制定了 10 条编码规则. NASA 的开发者是编程界最有挑战性的工作之一.他们编写代码并将开发安全的关键任务应用程序作为其主要关注点. 在这种情形下,遵守一些严格的编码规则是重要的.这些规则覆盖软件开发的多个方面,例如软件应该如何编码.应该使用哪些语言特性等. 尽管很难就一个好的编码标准达成共识,NASA 的喷气推进实验室(JPL)遵守一个编码规则,其名为"十的次方:

介绍最流行的框架:Backbone.js、Spine.js、Knockout.js和Batman.js

在本文中,将简要介绍其中一些最流行的框架:Backbone.js.Spine.js.Knockout.js 和 Batman.js.并使你了解如何为下一个项目挑选出最佳框架. 15 年前,许多人都使用 Perl 和 Coldhttp://www.aliyun.com/zixun/aggregation/2014.html">Fusion 之类的工具构建网站.我们经常编写可以在页面顶部查询数据库的脚本,对数据应用必要的转换,以及在同一个脚本底部显示数据.这类架构适合于向网站添加简单的 &qu

Knockout应用开发指南 第一章:入门

原文:Knockout应用开发指南 第一章:入门 1    Knockout简介 (Introduction) Knockout是一个轻量级的UI类库,通过应用MVVM模式使JavaScript前端UI简单化. Knockout有如下4大重要概念: 声明式绑定 (Declarative Bindings):使用简明易读的语法很容易地将模型(model)数据关联到DOM元素上. UI界面自动刷新 (Automatic UI Refresh):当您的模型状态(model state)改变时,您的UI