• Knockout v3.4.0 中文版教程-3-监控-通过监控创建视图模型(下)


    6. 显式订阅监控

    你通常不需要手动设置订阅,所以初学者应该跳过这一节。

    对于高级用户,如果你想注册自己的订阅来监控通知变化,你可以使用 subscribe函数,比如:

    myViewModel.personName.subscribe(function(newValue) {
        alert("The person's new name is " + newValue);
    });
    

    KO内部很多部分都是由subscribe来实现。大多数情况下你不需要使用它,因为内置绑定和模板系统要管理订阅。

    subscribe接收3个参数:callback是一个函数,无论何时通知发生,target(可选)定义在回调函数里面this的值,event(可选,默认值为change)是接收通知的事件名。

    如果你愿意,也可以终止订阅:首先捕获返回值作为一个变量,然后你可以调用它的处理函数,比如:

    var subscription = myViewModel.personName.subscribe(function(newValue) { /* 做一些事 */ });
    // ...然后...
    subscription.dispose(); // 我不再想要通知了
    

    如果你想要一个监控值在即将被改变之前通知,你可以订阅beforeEvent事件,比如:

    myViewModel.personName.subscribe(function(oldValue) {
        alert("The person's previous name is " + oldValue);
    }, null, "beforeChange");
    

    注意:Knockout不能保证beforeChangechange事件成对出现,因为代码的其他部分可能会单独引发任一事件。 如果您需要跟踪一个observable对象的先前值,您要使用订阅来捕获和跟踪它。

    7. 强制observable对象总是通知订阅者

    当写一个observable对象包含原始值(可以是数字、字符串、布尔值或者null),依赖监控通常只有在值实际改变时才进行通知。但是,可以使用内置的notify extender来确保observable对象的订阅者总是在写入时通知,即使写入值是相同的。你可以将扩展器应用到一个observable对象上,如下:

    myViewModel.personName.extend({ notify: 'always' });
    

    8. 延迟或阻止更改通知

    通常情况下,一个监控对象只要发生改变就会立即通知订阅者。但是一个监控对象频繁重复改变或触发一直更新,代价会很大,通过限制或延迟监控到的更改通知,可以获得更好的性能。可以使用频率限制扩展器来完成,如下:

    // 确保每50毫秒内通知改变不超过一次
    myViewModel.personName.extend({ rateLimit: 50 });
    
  • 相关阅读:
    男子利用POS机帮人非法套现1576万余元被起诉
    套现花样很多 弄不好成了诈骗
    刀尖上的无本生意 信用卡套现投资盛行
    新三板是什么—新三板科普知识讲堂
    Android注入事件的三种方法比较
    当今最流行的Node.js应用开发框架简介
    安卓WindowManager注入事件如何跳出进程间安全限制
    伟大创意检验10要
    初创互联网公司简明创业指南
    根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信
  • 原文地址:https://www.cnblogs.com/DHclly/p/6204347.html
Copyright © 2020-2023  润新知