【发布时间】:2016-09-25 07:07:48
【问题描述】:
我有 2 个变量声明为 mtn 和 atn,它们的值是根据 API ajax 响应填充的。
现在,我正在为 mtn 和 atn 变量分配一个从 API 响应返回的值,在我的情况下,因为 mtn 为 null 而 atn 有一个 10 位数字。因此,我将 atn1、atn2、atn3 与 atn 的子字符串一起分配,而 mtn1、mtn2 和 mtn3 未触及,正如您从下面的代码 sn-p 中看到的那样。
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。
既然我不知道我的 observables 是否被触及,我怎么知道调用 observable 值的访问方法? :(
P.S:这个问题出现在我正在使用的 Knockout 3.x 版本中。我也刚刚添加了 2.x 版本。
【问题讨论】:
-
这不是你设置或获取 observable 值的方式。在
ViewModel.mtn1 = ViewModel.mtn.substring(0, 3)行之后,mtn1不再是 observable,而是常规字符串。
标签: knockout.js knockout-2.0 knockout-3.0