我有两个输入绑定到它们自己的可观察值。两者都具有启动ajax调用的订阅功能。还有一些其他字段将从ajax结果中填写。我希望能够在键入companyName时获取数据。我还想在输入cardNumber时获得companyName(以及更多),但是给companyName一个值将触发其subscibe函数,该函数将启动另一个ajax调用。我想防止这种情况的发生。
cardNumber = ko.observable();
companyName = ko.observable();
cardNumber.subscribe(function () {
getDataFromCardNumber(cardNumber());
});
companyName.subscribe(function () {
getDataFromCompanyName(companyName());
});
getDataFromCardNumber = function (cardNr) {
$.ajax({
type: 'GET',
data: { number: cardNr },
url: '/Home/GetCardInfo',
success: function (data) {
companyName(data.Company.CompanyName);
//some other fields
}
});
};
//getDataFromCompanyName(name) contains another ajax call to fill out some other fields aswell
我看到两个选择:
dispose
在从回调中写入之前进行预订,然后在设置新值时重新附加它。const obsA = ko.observable("a");
const obsB = ko.observable("b");
const updateA = newVal => setTimeout(
() => {
subA.dispose();
obsA("reset by B");
subA = obsA.subscribe(updateB);
}, 500);
const updateB = newVal => setTimeout(
() => {
subB.dispose();
obsB("reset by A");
subB = obsB.subscribe(updateA);
}, 500);
let subA = obsA.subscribe(updateB);
let subB = obsB.subscribe(updateA);
ko.applyBindings({ obsA, obsB });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
A: <input data-bind="value: obsA" />
B: <input data-bind="value: obsB" />
write
逻辑调用更新:const obsA = ko.observable("a");
const obsB = ko.observable("b");
const uiObsA = ko.computed({
read: obsA,
write: val => {
obsA(val);
updateB();
}
});
const uiObsB = ko.computed({
read: obsB,
write: val => {
obsB(val);
updateA();
}
});
const updateB = newVal => setTimeout(
() => obsB("reset by A"), 500);
const updateA = newVal => setTimeout(
() => obsA("reset by B"), 500);
ko.applyBindings({ obsA, obsB });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
A: <input data-bind="value: uiObsA" />
B: <input data-bind="value: uiObsB" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句