2012-11-22 4 views
6

사용자에 대한 편집 양식을 만들고 있는데, 다중 선택에서 기본적으로 사용자의 역할이 선택되지 않습니다.넉 아웃 복수 선택 selectedOptions이로드시 선택되지 않았습니다.

"관리자"및 "중재자"의 두 가지 응용 프로그램 역할이 있습니다. 샘플 사용자는 "관리자"역할을가집니다. 이것은 기본적으로 선택되지 않습니다.

http://jsfiddle.net/jgT8s/4/

HTML :

<form data-bind="with: user"> 
    <select id="selectRoles" 
     data-bind="options: $root.allRoles, selectedOptions: Roles, optionsText: 'Name', optionsValue: 'Id'" 
     multiple="true" 
     size="5"> 
    </select> 
</form> 

JS :

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

    self.Id = ko.observable(1337); 
    self.Username = ko.observable('pietpaulusma'); 
    self.Roles = ko.observableArray([{ Id: 1, Name: 'Administrator' }]); 
}; 

function UserViewModel() { 
    var self = this; 

    self.user = ko.observable(new User()); 
    self.allRoles = ko.observableArray([{ Id: 1, Name: 'Administrator' }, { Id: 2, Name: 'Moderator' }]); 
} 

ko.applyBindings(new UserViewModel()); 

업데이트 는 dependentObservable를 생성하고 그 맵핑 한 selectedOptions

작업 버전 : optionsValue: 'Id' : http://jsfiddle.net/jgT8s/5/

+0

그것은 종속적 인 Observable에 관한 좋은 팁입니다. 우리가 그런 길이로 가야한다는 수치 스럽습니다. –

답변

6

문제는 Roles이 포함되어 있다는 것입니다 그것은 단지 값 부분을 포함해야하는 반면 "전체"개체가 :

self.Roles = ko.observableArray([1]); 

여기를보세요 : http://jsfiddle.net/Vkda5/

+1

고맙습니다. 나는 모든 http://jsfiddle.net/jgT8s/5/의 모든 ID를 반환하는 dependentObservable을 만들었습니다. knockout이 optionsValue 속성 tho를 사용하여 객체를 매핑 한 경우에 좋을 것입니다. – Bas

+0

@Bas : 나는 동의한다 -'optionsValue'를 일관성있게 사용하는 것은 좋을 것이다. –

3

녹아웃이 경우 Id입니다 값으로 선택 옵션을 비교해야합니다. 그리고 Role 개체 배열을 전달하고 있습니다. 대신 Id의 배열을 전달해야합니다

var User = function() { 
    ... 
    self.Roles = ko.observableArray([1]); 
}; 
+0

처음에는 대답했지만 대답은 답을 못했습니다 .. ?? +1. –

+0

누구나 ID 대신 객체를 갖는 방법을 알고 있습니까? – AlexRebula

+0

여기서 중요한 것은'optionsValue :'를 지정함으로써'options :'바인딩이 객체의 배열을 가리키고 있어도리스트가 정확히 무엇을 바인딩 하는지를 설정한다는 것입니다. 이것을 파악하는 데 다소 시간이 걸립니다. – Shaun