2013-08-15 2 views
1

값이 "ham"인 선택 selectedValue의 사전 설정 값이 있습니다. "스팸", "햄", "치즈"의 세 가지 옵션이 있습니다. 뷰 모델이 적용되면반복 바인딩이있는 녹아웃 : 처음에 선택한 값을 덮어 쓰는 중

는 "햄"값은 선택 이지만, selectedValue는 것으로 보인다 있지만 "햄"실제로 선택하지 않은 것이 값이다 푼다, 그래서.

selectValue의 초기 값을 유지하려면 무엇을 변경해야합니까? 내가 https://github.com/mbest/knockout-repeat 바인딩 반복을 사용하고 : 다음은 jsfiddle

html로에게

<select data-bind="value:selectedValue"> 
    <option data-bind="repeat: values" 
     data-repeat-bind="value: $item(), text: $item()"> 
    </option> 
</select> 
<br>selectedValue: <span data-bind="text:selectedValue"></span> 

뷰 모델

var viewModel = function() { 
    this.selectedValue = ko.observable("ham"); //initial value has been chosen. 
    this.values = ko.observableArray(["spam", 'ham', 'cheese']); 
    this.showMeSelectedValue = function(){alert(this.selectedValue())}; 
}; 

ko.applyBindings(new viewModel()); 

주입니다. 일반적으로 일반 옵션 바인딩을 사용 하겠지만 선택한 레이블이 작동하려면 바인딩을 반복해야합니다.

답변

3

당신이 이것을 처리 할 수있는 몇 가지 다른 방법이 있습니다. 쉬운 방법은 바인딩을 해당 자식에게 먼저 적용하는 사용자 지정 바인딩을 사용하는 것입니다. 당신은 지정합니다, 지금

ko.bindingHandlers.bindChildren = { 
    init: function(element, valueAcessor, allBindings, vm, bindingContext) { 
     //bind children first 
     ko.applyBindingsToDescendants(bindingContext, element); 

     //tell KO not to bind the children itself 
     return { controlsDescendantBindings: true }; 
    } 
}; 

: http://jsfiddle.net/rniemeyer/r9kPm/

+1

내가보기 대신 바인딩 컨텍스트를 사용하려면이 편집 : 여기

<select data-bind="bindChildren: true, value: selectedValue"> <option data-bind="repeat: values" data-repeat-bind="value: $item(), text: $item()"></option> </select> 

은 예입니다 여기에

은 예입니다 자손을 묶을 때의 모델. 그렇게하면'$ root','$ parent' 등등에 접근 할 수 있습니다. –

+0

@MichaelBest - 업데이트 된 바이올린. 좋은 편집. –