와 내부/외부 루프 .. 나는 테이블 필드 (스키마) 만 사용할 수 있습니다 경우 무장 강도와 동적 테이블을 작성해야 런타임에. 스키마가 컴파일 알려진 경우 그래서 일반적으로, 내가 이런 짓을 할 것이다 :스냅 : 내가 제대로 제목에 질문을 말로 표현하지만, 여기 상황이면 나는 확실하지 않다 무장 강도
내가 필드와 컴파일 타임에 자신의 이름의 수를 알고있다<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"
대단히 고맙습니다. 그래도 여전히 작동하지 않습니다. 나는 하루 동안 놀았습니다 - 운이 없습니다. 분명히 뭔가 잘못 됐어. 귀하의 예제에서 볼 수 있듯이, 단일 행 내에 필드를 생성하는 내부 "루프"만 있습니다. 이제 내부 "루프"는 테이블 내의 행을 생성하는 외부 루프와 함께 실행되어야합니다. 나는이 둘을 어떻게 연결해야할지 모르겠다. 따라서 내부 'mapSplices'는 행을 만들고 외부 'mapSplices'는 표를 만들어야합니다. –
그래, 답을 다시 썼다. 시도해 봐. – mightybyte
고맙습니다. 나도 그걸 부숴 버렸어.귀하의 첫 번째 예제조차도 많이 도움이되었습니다. 'runChildren'함수를 중첩하는 방법에 대한 아이디어가 있습니다. 다시 한번 감사합니다. –