我有一个表格,我计划在其中收集多人的信息。每个人的回答很可能是相同的,但我想让人们能够在保持简单的同时给出定制的回答。所以,我举了一个例子:
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 以供引用
关于javascript - knockout : cascade write to multiple observables if no value yet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27723040/