2011-07-27 3 views
1

내 뷰 모델은 어떤 이유로 인해 하나의 데이터 바인딩 요소 만 업데이트하지만 다른 요소는 업데이트하지 않습니다.Observable value update는 바인딩 된 하나의 요소를 변경하지만 다른 요소는 변경하지 않습니다.

signUpModel.fullNameActive 값 다음은 inputblurfocus 이벤트를 통해 변경 :

<span data-bind="text: signUpModel.fullNameActive"></span> 

이 업데이트되지만 다음

<p class="inputTip" data-bind='visible: signUpModel.fullNameActive'> 
    Enter your first and last name 
</p> 

가 없습니다. 왜 그런가요?

페이지를 처음 열면 작동하지 않는 요소가 표시되고 숨겨진 다음 표시됩니다. 3 번 변경된 것 같습니다. 이 뷰 코드와

var signUpModel = new SignUpModel(); 

    $(document).ready(function() { 
     ko.applyBindings(signUpModel); 
    }); 

    function SignUpModel() {   
     this.userID = ko.observable(""); 
     this.userName = ko.observable(""); 

     this.fullName = ko.observable(""); 
     this.fullNameActive = ko.observable(false); 

     this.sex = ko.observable(""); 
     this.dateOfBirth = ko.observable(""); 
     this.emailAddress = ko.observable(""); 
     this.profileImage = ko.observable(""); 
     this.levelID = 1;  
    } 

는 :

<div class="fieldContainer"> 
    <span data-bind="text: signUpModel.fullNameActive"></span>   
    <input type="text" data-bind="event: {blur: function(){signUpModel.fullNameActive(true)}, focus: function(){signUpModel.fullNameActive(false)} }, value: signUpModel.fullName, valueUpdate: 'afterkeydown'" maxlength="40" id="inputFullName" /> 
    <div class="inputHelp"> 
     <p class="inputTip" data-bind='visible: signUpModel.fullNameActive'> 
      Enter your first and last name</p> 
     <p class="isRequired" data-bind='fadeVisible: signUpModel.fullName().length < 1 || signUpModel.fullName().replace(/\s/g,"") == ""'> 
      Gotta enter something</p> 
     <p class="isGood" data-bind='fadeVisible: signUpModel.fullName().length > 1 && signUpModel.fullName().replace(/\s/g,"") != ""'> 
      This is exciting <span id="personsName" data-bind="text: signUpModel.fullName"></span> 
     </p> 
    </div> 
</div> 

답변

2

나는 깜박이는 fadeVisible이 사용되는 바인딩을 함께 할 수있는 뭔가가 있다고 생각한다.

ko.bindingHandlers.fadeVisible = { 
    init: function(element, valueAccessor) { 
     $(element).toggle(ko.utils.unwrapObservable(valueAccessor())); 

    }, 
    update: function(element, valueAccessor) { 
     ko.utils.unwrapObservable(valueAccessor()) ? $(element).fadeIn() : $(element).fadeOut(); 
    } 

시도는이 바이올린으로 당신을 조정하기 : http://jsfiddle.net/rniemeyer/f3XMN/

이 두 요소가 fullNameActive의 값에 따라 제대로 업데이트 한 것으로 나타났습니다이 같은

뭔가 간단한 구현 될 것이다.

+0

안녕 RP, 응답 해 주셔서 감사합니다! 그래서 나는 fadeVisible bindingHandler를 가졌지 만 작동하지 않아 나는 단지 보이기 위해서 노력했다. 그것은 역시 작동하지 않았다. 이제는 내 fadeVisible을 제공 한 버전으로 업데이트했고 작동합니다.하지만 왜 보이지 않는가? 제발 도와주세요. ') –

+0

그냥 보이는 것을 사용하는 데 문제가 없어야합니다. 다른 일이 일어나야합니다. 다음은 보이는 것을 사용하는 샘플입니다 : http://jsfiddle.net/rniemeyer/f3XMN/2/. 문제를 재현하고 업데이트를 눌러 새로운 링크를 얻을 수 있는지 확인하십시오. –

+0

안녕하세요 RP, jsfiddle에서 재생할 수 없습니다. 그것은 정확히 똑같은 코드입니다. 유일한 차이점은 다른 녹아웃 뷰 모델을 가진 부분이 있다는 것입니다. 속성은 동일하지 않습니다. 나는 모른다. 다시 볼 수는 있지만 작동하지 않지만 fadeVisible은 작동합니까? –

관련 문제