2016-09-25 116 views
0

我有2個變量聲明爲mtn和atn,它們的值將根據API ajax響應填充。設置值前後訪問可觀察變量不起作用

現在,我分配mtn和atn變量與從API響應返回的值,在我的情況下,因爲mtn將作爲null而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. 

我相信訪問ATN1作爲ViewModel.atn1工作,而訪問MTN1爲ViewModel.mtn1不工作的方法,該方法的原因是因爲可觀察到的重新分配爲ATN1的,而MTN1沒有被觸及。

那麼我怎麼知道哪個訪問方法調用可觀測值,因爲我不知道我的可觀測值是否被觸動? :(

PS:這個問題是在我使用我剛纔添加2.x的版本,以及淘汰賽3.x版存在的

+1

那是你沒怎麼設置或獲取可觀察到的值。行'ViewModel.mtn1 = ViewModel.mtn.substring後( 0,3)','mtn1'不再是一個可觀察的,這是一個普通的字符串。 – DCoder

回答

1

可觀察到的是一個getter,setter函數來設置其內容。 ,你做

ViewModel.mtn1(ViewModel.mtn.substring(0, 3)); 

要得到它的內容,你做

value = ViewModel.mtn1();