2013-07-10 3 views
0

아래 코드를 얻을 때 혼란 스러웠습니다. 나는 녹아웃이 어떻게 작동하는지 이해하려고합니다. 여기에이 코드이 녹아웃 코드가 작동하는 방법

var vm = { 
       TimeDT: ko.observable(), 
       TimeString: ko.observable() 
      }; 

나는 객체가이 방법으로 같은 선언입니다 이해할 수에서

<span data-bind="text: TimeString">Start...</span> 
var vm = { 
      TimeDT: ko.observable(), 
      TimeString: ko.observable() 
     }; 

     function updateValues() { 
      var data = new Date(); 
      vm.TimeDT(data); 
      vm.TimeString(data); 
     } 

     ko.applyBindings(vm); 

     updateValues(); 
     setInterval(updateValues, 5000); 

이 봐 전체 코드입니다. VM은 여기 객체이며 & TIMESTRINGTimeDT라는 두 개의 기능을 가지고 있지만 난이

TimeDT: ko.observable(), what is the meaning of 
ko.observable() is assign to TimeDT ? 

what will store in TimeDT return by ko.observable() ? 

몇 샘플 코드와 세부 사항에 expalin하시기 바랍니다 이해할 수 없었다. 덕분에

+3

knockoutjs 문서에서 잘 설명되어 있습니다. http://knockoutjs.com/documentation/observables.html –

답변

2

ko.observable은 변화하는 변수를 추적하는 방법입니다. 녹아웃이 변경에 응답 할 수있게하려면 ko.observable을 사용해야합니다.

그래서, 당신이 할 경우이 :

var myVM = { 
    someProp = true 
} 

그리고 다른 곳 코드에서이 수행

myVM.someProp = false; 

녹아웃 변경 사항을 볼 수 없습니다입니다. 그러나 당신이 경우에이 :

var myVM = { 
    someProp = ko.observable(true); 
} 

그런 다음 당신은 나중에 값을입니다 변경할 수 있습니다

myVM.someProp(false); 

및 녹아웃 변경을 통지하고 자동으로 바운드 HTML을 업데이트합니다.

참고 : ko.obsevable 함수가 아닌 실제 재산이기 때문에 값에 액세스하는 약간 다릅니다 (자바 스크립트 getter 및 setter를 지원하지 않는 IE 감사) :

var whatsMyValue = myVM.someProp(); 

당신은 실제로 메소드를 호출해야 그리고 그것은 그것의 가치를 반환 할 것입니다.

TimeDT: ko.observable() 
: 당신이 실제로 필요한 것은

if (myVM.someProp) { 
    // this code will always be executed regardless of the actual value 
    // of someProp() because myVM.someProp is a function, 
    // which is truthy. 
} 

는 또한

if (myVM.someProp()) { 
    // now this works as expected. 
} 

주의 당신이 작업을 수행 할 때 : 먼저 시작하고 이런 일을 끝낼 때 잊지 쉽게

TimeDT은 초기 값이없는 관찰 가능합니다. 그러나 당신은이 작업을 수행 :

vm.TimeDT(data); 

녹아웃 변경 사항을보고 TimeDT 모든 바인딩을 업데이트합니다.

+0

여기에 ko.observable (true)를주었습니다. 하지만 내 코드에서 ko.observable(); true 또는 false가 아니므로 ..... 기본값이 true입니까? 내가 거짓을 통과하면 어떻게 될 것입니까? 대답 해줘서 고마워요. – Thomas

+0

@ 토마스 : 값을주지 않으면 기본적으로 정의되지 않습니다 (이는 허위입니다). 물론,'ko.observable'는 bool 이외의 것을 저장할 수 있습니다! –

1

스트레이트 from docs : special JavaScript objects that can notify subscribers about changes, and can automatically detect dependencies.

이 코드는 TimeDT 속성을 관찰 값으로 초기화하여 값의 변경 사항을 추적하고 필요한 경우 UI를 업데이트합니다.

관련 문제