2012-12-06 1 views
2

와 내부/외부 루프 .. 나는 테이블 필드 (스키마) 만 사용할 수 있습니다 경우 무장 강도와 동적 테이블을 작성해야 런타임에. 스키마가 컴파일 알려진 경우 그래서 일반적으로, 내가 이런 짓을 할 것이다 :스냅 : 내가 제대로 제목에 질문을 말로 표현하지만, 여기 상황이면 나는 확실하지 않다 무장 강도

내가 필드와 컴파일 타임에 자신의 이름의 수를 알고있다
<table> 
    <row-splice> 
    <tr> 
     <td> <field1/> </td> 
     <td> <field2/> </td> 
     <td> <field3/> </td> 
    </tr> 
    </row-splice> 
</table> 

. 'runChildrenWith', 'mapSplices'등으로 처리기에서 처리하는 방법을 모두 이해합니다 ...

이제 필드 및 스키마 수가 런타임에만 사용 가능할 때 상황이 발생합니다. 는 그래서 강도 짓 템플릿, 내가 그것을 이해 같을 것이다 :

<table> 
    <row-splice> 
    <tr> 
     <field-splice> 
     <td> <field/> </td> 
     </field-splice> 
    </tr> 
    </row-splice> 
</table> 

정말 핸들러 내에서 구현하는 방법에 붙어있다. 나는 'mapSplices'를 두 번 할 필요가 있다고 가정합니다. 다른 하나는 올바른 것인가요? 경험적으로 말하자면, 이것은 내외부의 루프/맵이 될 것입니다, 그렇죠?

어떻게 핸들러 내에서 이런 짓을 했을까?

감사합니다.

이 업데이트 :

그 스키마가 DB에서 런타임에 검색 할 수있는 얘기를 깜빡 했네요 구입 방법 : 데이터 스키마가없는 MongoDB를에서 온다하지만 그것이 정말 필요하지 않습니다

Table { tableName :: Text 
     , tableFields :: [Text] 
     } 

및 변환 매핑하는 :

fromList [("FieldName1","Value1"),("FieldName2","Value2"),("FieldName3","Value3")] 

갱신 2를 :

I을 행운과 함께 제안 된 예제를 시도했다. 나는 모든 데이터를 단일 열로 얻는다. I 필요한 것은 동적 필드 및 열을 생성하는 간단한 내부 및 외부 루프. 그것은이 다음 간단 할 수 없습니다

<% @rows.each do |row| %> 
    <tr> 
    <% row.each do |field| %> 
    <td> <%= field %> </td> 
    <% end %> 
    </tr> 
<% end %> 

갱신 3 :

마침내 긴 주말 휴식 후 금 ... 가 여기에 예입니다. 그것은 mongodb 특정이며 나는 문자 그대로 복사하고 붙여 넣었습니다. 는하지만 누군가가 내부/외부 루프에 걸리면 그것이 도움이 될 것입니다, 나는 가정한다.

showTableH :: AppHandler() 
showTableH = do 
    table <- liftIO $ fetchTable tname 
    docs <- liftIO $ getColList tname 
    let rowSplice doc = mapSplices (\f -> fieldSplice $ T.pack $ at f doc) (tableFields table) 
    where fieldSplice field = runChildrenWithText [("field", field)] 
    let listRowsSplice = mapSplices (\d -> runChildrenWith [("fields", rowSplice d)]) docs 
    heistLocal (bindSplices [("rows", listRowsSplice)]) $ render "show-table" 

답변

2

여기서 핵심은 runChildrenWith와 함께 mapSplices를 사용하는 것입니다. 나는 다음과 같이 보일 것이라고 생각합니다 :

+0

대단히 고맙습니다. 그래도 여전히 작동하지 않습니다. 나는 하루 동안 놀았습니다 - 운이 없습니다. 분명히 뭔가 잘못 됐어. 귀하의 예제에서 볼 수 있듯이, 단일 행 내에 필드를 생성하는 내부 "루프"만 있습니다. 이제 내부 "루프"는 테이블 내의 행을 생성하는 외부 루프와 함께 실행되어야합니다. 나는이 둘을 어떻게 연결해야할지 모르겠다. 따라서 내부 'mapSplices'는 행을 만들고 외부 'mapSplices'는 표를 만들어야합니다. –

+0

그래, 답을 다시 썼다. 시도해 봐. – mightybyte

+0

고맙습니다. 나도 그걸 부숴 버렸어.귀하의 첫 번째 예제조차도 많이 도움이되었습니다. 'runChildren'함수를 중첩하는 방법에 대한 아이디어가 있습니다. 다시 한번 감사합니다. –

관련 문제