2012-10-18 3 views
2

이 회원의 그룹을 선택하기위한 선택 상자가있는 회원 양식이 있습니다.Backbone.Marionette의 양식에 컬렉션 바운드 선택 상자를 추가하는 방법은 무엇입니까?

백본을 사용 중입니다. & 백본. 마리오 네트. 멤버 폼은 MemberModel에 바인딩됩니다. 선택 상자의 데이터는 GroupCollection에서 가져옵니다. MemberModel에는 group_id 만 포함되며 GroupCollection에 대한 참조는 포함되지 않습니다.

이제이 선택 상자를 수동으로 생성합니다 (GroupCollection을 가져 와서 Javascript를 사용하여 선택 상자에 추가).

Backbone.Marionette에서 더 좋은 방법이 있는지 알고 싶습니다. ListView 및 ItemView를 사용하여이 작업을 수행 할 수 있다고 생각했지만이 양식이 레이아웃이 아니기 때문에이 멤버 폼에 선택 상자를 추가하는 방법을 알 수 없습니다.

답변

5

이 작업을 수행 할 수있는 여러 가지 방법이 있으며 CollectionView를 사용할 수 있습니다. CollectionView의 tagName을 "select"로 설정해야하고 CollectionView와 함께 사용되는 itemView는 tagName을 "option"으로 설정해야합니다.

더 쉬운 생각은 자신의 컬렉션에서 데이터 소스로 컬렉션을 사용하는 것이 더 쉬운 아이디어 일 수 있습니다. 당신은 아무 문제없이 ItemView와 컬렉션을 사용할 수 있습니다, 당신은 단지 템플릿에서 루프를해야합니다.

사용 underscore.js 템플릿 :

<script type='text/template' id='some-template'> 
    <select> 
    <%= _.each(items, function(item){ %> 
    <option value="<%= item.value %>"><%= item.name %> 
    <%= }) %> 
    </select> 
</script> 

Marionette.ItemView.extend({ 
    template: "#some-template" 
    // ... 
}) 

내가 여기, 더 구체적으로이 두 가지 기본 옵션에 대해 쓴 : 도움이 http://lostechies.com/derickbailey/2011/10/11/backbone-js-getting-the-model-for-a-clicked-element/

희망.

+0

감사합니다. Derick. 내 템플릿 코드를 제안으로 다시 작성했습니다 (Underscore가 아니라 Handlebars). 더 이상 View에 MemberModel을 직접 전달하지 않지만 ViewModel을 먼저 작성합니다. 뭔가 그런 : var viewModel = new Backbone.Model(); viewModel.set ({member : member, groups : groups}); 그런 다음 템플릿은 viewModel.groups에서 읽고 예상대로 렌더링 할 수 있습니다. –

+0

Derick 링크가 더 이상 작동하지 않습니다. itemview를 사용하여 접근법을 시도했지만 컬렉션이 가져 오기 작업으로 완료되면보기가 렌더링되지 않습니다. 이 작업이 자동으로 수행되어서는 안됩니까? – Gambo

관련 문제