javascript - knockout : cascade write to multiple observables if no value yet?

标签 javascript knockout.js

我有一个表格,我计划在其中收集多人的信息。每个人的回答很可能是相同的,但我想让人们能够在保持简单的同时给出定制的回答。所以,我举了一个例子:

http://jsfiddle.net/r29xtLaq/1/

这是一个非常简单的输入表单:

 <p>Person 1: <input data-bind='value: person1' /></p> 
 <p>Person 2: <input data-bind='value: person2' /></p> 

在这个 jsfiddle 中,我希望当我为 person1 填写一个值时,该值将在开始时自动级联到 person2,因为 person2 的值为空。但它们都由单独的可观察对象支持,因为在为用户预填充 person2 后,她或他可以编辑 person2,并且不会级联回 person1。

最佳答案

你有没有尝试过任何事情来完成这个?这应该相当简单,只需在 Knockout 中实现一个自定义扩展程序,该扩展程序订阅值更改并检查其他内容是否为空并填充它们。

例。扩展器-

ko.extenders.setOthersOnChange = function(target, others) {
    target.subscribe(function(newValue) {
        ko.utils.arrayForEach(others, function (other) {
            if (!ko.unwrap(other)) {
                other(newValue);
            }
        });
    });
    return target;
};

在你的虚拟机中 -

this.person2 = ko.observable().extend({ setOthersOnChange: [] });
this.person1 = ko.observable().extend({ setOthersOnChange: [this.person2] });

这里的好处是您可以拥有 n 数量的其他依赖可观察对象,而无需增加您必须手动创建的订阅数量。我还建议您确保妥善处理它们。

更新 fiddle 以供引用

http://jsfiddle.net/r29xtLaq/3/

关于javascript - knockout : cascade write to multiple observables if no value yet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27723040/

相关文章:

javascript - 如何根据可重用组件分离大型 React 代码库?

javascript - 使用 Javascript 删除主题标签

javascript - 将项目添加到 Observable Array Knockout

javascript - 一般树的二叉树

javascript - 一维到二维数组javascript

JavaScript 不适用于所有浏览器

javascript - 匹配正则表达式 javascript 中的 ";"字符

javascript - 如何将 list.js 与 Hot Towel 模板一起使用

javascript - 无法访问 knockout 可观察数组项

knockout.js - 有没有办法避免敲击时的提交绑定(bind)在按下回车键时发送表单?