在设置值之前和之后访问可观察变量不起作用
Accessing observable variable before and after setting a value is not working
我有 2 个变量声明为 mtn 和 atn,它们的值根据 API ajax 响应填充。
现在,我正在为 mtn 和 atn 变量分配一个从 API 响应返回的值,在我的例子中,因为 mtn 为空,而 atn 有一个 10 位数字。因此,我将 atn1、atn2、atn3 分配给 atn 的子字符串,而 mtn1、mtn2 和 mtn3 未受影响,正如您从下面的代码片段中看到的那样。
var ViewModel = {
mtn: null,
atn: null,
mtn1: ko.observable(null),
mtn2: ko.observable(null),
mtn3: ko.observable(null),
atn1: ko.observable(null),
atn2: ko.observable(null),
atn3: ko.observable(null)
}
// Ajax API call happens and assigns ViewModel.mtn and ViewModel.atn
if (ViewModel.mtn != null && ViewModel.mtn.length == 10) { //This condition is not true because ViewModel.mtn is coming as null in case and so mtn1, mtn2 and mtn3 observables are untouched
ViewModel.mtn1 = ViewModel.mtn.substring(0, 3);
ViewModel.mtn2 = ViewModel.mtn.substring(3, 6);
ViewModel.mtn3 = ViewModel.mtn.substring(6, 10);
}
if (ViewModel.atn != null && ViewModel.atn.length == 10) {
ViewModel.atn1 = ViewModel.atn.substring(0, 3);
ViewModel.atn2 = ViewModel.atn.substring(3, 6);
ViewModel.atn3 = ViewModel.atn.substring(6, 10);
}
ko.applyBindings(ViewModel);
// Click event happens from View and Business logic UI validations take place below
processClick: function() {
.var strmtn = ViewModel.mtn1 + ViewModel.mtn2 + ViewModel.mtn3; // This is not working and throwing error and only ViewModel.mtn1() is working
var stratn = ViewModel.atn1 + ViewModel.atn2 + ViewModel.atn3; // This is working fine but ViewModel.atn1() is not working.
我认为作为 ViewModel.atn1 访问 atn1 的方法有效而作为 ViewModel.mtn1 访问 mtn1 的方法无效的原因是因为为 atn1 重新分配了 observable 而 mtn1 没有被触及。
既然我不知道我的可观察值是否被触及,我怎么知道调用可观察值的访问方法是什么? :(
P.S:这个问题出现在我使用的 Knockout 3.x 版本中。我也刚刚添加了 2.x 个版本。
Observable 是一个 getter-setter 函数。要设置其内容,您需要
ViewModel.mtn1(ViewModel.mtn.substring(0, 3));
要获取其内容,您需要
value = ViewModel.mtn1();
我有 2 个变量声明为 mtn 和 atn,它们的值根据 API ajax 响应填充。
现在,我正在为 mtn 和 atn 变量分配一个从 API 响应返回的值,在我的例子中,因为 mtn 为空,而 atn 有一个 10 位数字。因此,我将 atn1、atn2、atn3 分配给 atn 的子字符串,而 mtn1、mtn2 和 mtn3 未受影响,正如您从下面的代码片段中看到的那样。
var ViewModel = {
mtn: null,
atn: null,
mtn1: ko.observable(null),
mtn2: ko.observable(null),
mtn3: ko.observable(null),
atn1: ko.observable(null),
atn2: ko.observable(null),
atn3: ko.observable(null)
}
// Ajax API call happens and assigns ViewModel.mtn and ViewModel.atn
if (ViewModel.mtn != null && ViewModel.mtn.length == 10) { //This condition is not true because ViewModel.mtn is coming as null in case and so mtn1, mtn2 and mtn3 observables are untouched
ViewModel.mtn1 = ViewModel.mtn.substring(0, 3);
ViewModel.mtn2 = ViewModel.mtn.substring(3, 6);
ViewModel.mtn3 = ViewModel.mtn.substring(6, 10);
}
if (ViewModel.atn != null && ViewModel.atn.length == 10) {
ViewModel.atn1 = ViewModel.atn.substring(0, 3);
ViewModel.atn2 = ViewModel.atn.substring(3, 6);
ViewModel.atn3 = ViewModel.atn.substring(6, 10);
}
ko.applyBindings(ViewModel);
// Click event happens from View and Business logic UI validations take place below
processClick: function() {
.var strmtn = ViewModel.mtn1 + ViewModel.mtn2 + ViewModel.mtn3; // This is not working and throwing error and only ViewModel.mtn1() is working
var stratn = ViewModel.atn1 + ViewModel.atn2 + ViewModel.atn3; // This is working fine but ViewModel.atn1() is not working.
我认为作为 ViewModel.atn1 访问 atn1 的方法有效而作为 ViewModel.mtn1 访问 mtn1 的方法无效的原因是因为为 atn1 重新分配了 observable 而 mtn1 没有被触及。
既然我不知道我的可观察值是否被触及,我怎么知道调用可观察值的访问方法是什么? :(
P.S:这个问题出现在我使用的 Knockout 3.x 版本中。我也刚刚添加了 2.x 个版本。
Observable 是一个 getter-setter 函数。要设置其内容,您需要
ViewModel.mtn1(ViewModel.mtn.substring(0, 3));
要获取其内容,您需要
value = ViewModel.mtn1();