2013-08-24 2 views
0

콘텐츠를로드하기 위해 요소를 마스킹하는 jquery loadmask addon을 작동 시키려고합니다. knockout.js를 사용하고 있는데, 내 viewmodel 외부의 요소를 마스크하는 경우 작동하지만 POST 요청을 제출할 때 마스크를 적용한 다음 수신 할 때 마스크를 제거하려고합니다. 나는 "객체에 메쏘드 마스크가 없다"라는 오류가 발생합니다. 나는 그것을 접근하기위한 객체를 설정하는 방법에 대해서는 확실히 모른다.자바 스크립트로 다른 함수에서 액세스하기

이 방법은 효과가 있지만 원하는 것은 아닙니다. 나는 위대하고 전부

<div id = "register_container"> 
    <div data-bind="visible: register()"> 
      <div id = "register_form"> <!--this is the div I want to mask -->> 
       <button data-bind="click: submitRegistration">Submit</button> 
      </div> 
    </div> 
</div> 

function MyViewModel(){ 

    self.submitRegistration = function(){ 
      //I want to mask here. When I try it says Object[object object] has no method mask 
      $.post....{ 
       if(data.result == success){ 
        // andunmask here 
       } 
      } 
     } 
} 

$("#register_form").mask("Waiting..."); //the masking works when I place it here, but it's always enabled and I want it inside the viewmodel where I noted so it only works when the POST request is in process 

에서 마스크를 호출하고자하는 코드에 언급,하지만 난 언급 뷰 모델 내부에서 뭔가를 마스크하고 싶다. 이것을 어떻게 할 수 있습니까?

답변

0

몇 가지 문제가있을 수 있습니다.

Frist, if 문과 비교하여 과제를 수행하고 있습니다. 대신를 사용

if(data.result == success){ 

또는 심지어

if(data.result === success){ 

두 번째는 내가 아주 전형적 다음과 같습니다 코드 self.submitRegistration(){, 이해하지 못하고 있다는 사실이다 : 다음

var MyViewModel = function() { 
    var self = this; 

    self.submitRegistration = function() { 
    }; 
}; 

을 , $.post 전화를 조롱하면 다음과 같이 작동합니다.

var MyViewModel = function() { 
    var self = this; 

    self.register = ko.observable(true); 

    self.submitRegistration = function() { 
     $("#register_form").mask("Waiting..."); 

     // Mock $.post 
     window.setTimeout(function() { 

      if (1 == 1) { 
       // andunmask here 
       $("#register_form").unmask(); 
      } 
     }, 3000); 
    } 
}; 

ko.applyBindings(new MyViewModel());  

데모는 this fiddle을 참조하십시오.

그 데모에 대한 this updated fiddle를 참조하십시오

당신도 녹아웃 도움을 줄 수 당신을 찾기 위해 요소를 찾을 수 있습니다.

// Use the "event" parameter to find the element... 
    self.submitRegistration = function(data, event) { 
     $(event.target).closest('#register_form').mask("Waiting..."); 

희망이 있습니다.

+0

조언을 주셔서 감사합니다. viewmodel은 단지 의사 코드이므로 부정확 한 것은 아무것도 아닙니다. 나는 그것을 빨리 입력 했으므로 여기에 백 줄의 코드를자를 필요가 없었습니다. – user1406951

+0

흠, 질문이 "빠르게 입력 된"친구가 아니라는 것을 확실히하면 더 나은 도움 (그리고 더 행복하게 자원하는 낯선 사람)을 얻을 수 있습니다. 게시하는 코드가 구문 상 괜찮은지 확인하십시오. 지금은 * 내가 * 알았을 때 당신을 도우려는 시도를해야만했다. *별로 좋지 않았다. '... (냉담하지 않다.) – Jeroen

+0

@ 조로 엔 미안하지만 어떻게 변할지 모르겠다. 아무것도. 내가 몇 가지 구문 오류가 있었지만, 어디에 또는 어떻게() 함수에 액세스하려고 노력하고있어 변경되지 않습니다. 기능의 관점에서, 그것은 동일합니다. – user1406951

관련 문제