2013-06-11 10 views
0

나는 자바 스크립트에서 select에 매핑되는 녹아웃 관찰 가능 항목이 있습니다. 선택 값에 따라 div에 "with"바인딩이 있습니다.녹아웃 업데이트가 관찰 가능하지 않음

javascript에서 observable 값을 설정해야하며 문제는 div가 결코 나타나지 않는다는 것입니다. 여기서, 세부 사항은 :

관찰 가능한는 UI에서 선택에 결합하고, 상기 선택된 값은 오브젝트이다

:

사용자가 값을 선택하면
<select data-bind="options: Offers, 
        optionsText: 'Offer', 
        optionsCaption: 'Please Choose', 
        value: SelectedOffer"> 
</select> 

, I 바운드 DIV 데이터와 함께 "이용해야 "그 선택 아래 표시 :

<div data-bind="with: SelectedOffer"> 
    .... 
</div> 

이제 UI에서 값을 선택하면이 완벽하게 작동합니다.

사용자가 상자를 검사

, 나는 자바 스크립트의 관측 값을 설정하고, 그 또한 작동합니다

event.SelectedOffer(myOffer); 

내가 선택에서 설정 한 서비스를 볼 수 있습니다. 문제는 "with"를 사용하는 div 바운드가 결코 나타나지 않는다는 것입니다. 선택에서 수동으로 무언가를 선택하면 다시 정상적으로 작동합니다.

나는 여러 가지를 시도해 봤지만 값이 바뀌 었음을 KO에 알리고 나에게 div를 보여줘야하지만 아무것도 작동하지 않는 것 같습니다. 내가 사용했습니다

valueHasMutated 
valueWillMutate 
ko.utils.triggerEvent 
$(myselect).change() 

도움말! 당신은 자동으로 뷰 모델에 SelectedOffer 관찰을 설정합니다 당신의 선택 요소에 KO

으로 value:

을 몇 가지를 혼동 것 같은

+1

작동하지 않는 것에 관한 질문을하기가 어렵습니다. 문제를 재현 할 수 없었습니다 : http://jsfiddle.net/ww9dK/. 어쩌면 당신의 문제를 보여주는 jsfiddle을 업데이트/생성하려고 할 수 있습니까? – nemesv

+0

의견을 보내 주셔서 감사 드리며 jsfiddle을 설정하십시오. jsfiddle을 업데이트하여 문제가 재현되도록했습니다. http://jsfiddle.net/ww9dK/5/. 보시다시피, 그리고 예상대로, 그것은 원래 문제에서 언급 한 것 이상입니다. 사실 목록을 바꾸고 있습니다.내 업데이트 된 jsfiddle 발췌 문장에서, 그것은 잘 작동하지만, 자바 스크립트와 잘 작동하지 않는다는 것을 보여줍니다. –

+0

제 문제는 여기에 재현되었습니다. jsfiddle.net/ww9dK/13 –

답변

0

Ok! 응답, esp nemesv의 의견에 감사하고 jsfiddle을 설정하십시오.

http://jsfiddle.net/ww9dK/14/

var ViewModel = function() { 
var self = this; 
    self.list1 = [{Offer: "Offer1"},{Offer: "Offer2"},{Offer: "Offer3"}]; 
    self.list2 = [{Offer: "Offer4"},{Offer: "Offer5"},{Offer: "Offer6"}]; 

    self.AlternateList = ko.observable(false); 
    self.SelectedOffer = ko.observable(); 
    self.SelectedList = ko.observable(self.list1); 

    self.selectSecond = function() { 

    self.SelectedList(!self.AlternateList() ? self.list2: self.list1); 
    self.SelectedOffer(!self.AlternateList() ? self.list2[0]: self.list1[0]); 
    } 
}; 

결론 내 대체 목록이 관찰 될 필요가 있다는 것입니다. 멋진 동료의 도움 덕분에 해결되었습니다. ko.applyBindings (새 ​​ViewModel());

0

는 소리. event.SelectedOffer(myOffer);으로 내가 생각하는대로 수동으로 설정할 필요가 없습니다.

는 경우에만 사용자가 무엇인가를 검사 할 때, 당신은 내가 http://jsfiddle.net/HLGKf/을 설정 한 당신의 '진짜'값

을 다른 관찰로 선택 상자에 값을 바인딩 한 후 수동으로 업데이트해야합니다 SelectedOffer를 업데이트하고 싶었다 단순한 ViewModel 및 선택 상자를 설정하는 방법과 with: 바인딩을 사용하는 방법을 보여주기 위해

+0

답장을 보내 주셔서 감사합니다. http://jsfiddle.net/ww9dK/13/을 참조하십시오. 이것은 내 문제를 재현합니다. 문제는 목록을 전환하는 것과 관련이 있습니다. –

+0

문제는 실제로 '확인'및 '이벤트'바인딩에 경쟁 조건이 있다는 것입니다. 1. 이벤트가 선택된 오퍼를 설정하고 있습니다. 2. AlternateList가 토글되고 있습니다. 3. (2)는 선택한 제안 아래에서 목록이 변경되도록합니다 (선택한 두 번째 기능에서 오류!). 선택 사항이 상자에 나타나기도합니다. 녹아웃이 관찰 가능 항목을 업데이트하려고 시도하는 순서에 대해 어떤 가정도하지 않는 것이 가장 좋습니다. 체크 된 바인딩에 의해 목록이 변경된 것을 알기 전에 selectSecond를 호출 할 때 가정합니다. – matrix10657

+0

나는 확실히 당신의 옵션 바인딩에서 조건부를 가지지 않는 것이 좋은 것이라고 생각하지만, 단지 내 요점을 설명하기 위해 : http://jsfiddle.net/kWTMx/2/ 여기 selectSecond 호출을 함수로 옮겼다. 이벤트 체크 박스의 '바인딩'에서 AlternateList가 업데이트 된 후에 발생하는 것을 보장합니다. – matrix10657

관련 문제