10

私の Yesod プロジェクトでは、次のルートがあります。

/api/hide/thread/#Text/#Int      ApiHideThreadR   GET

クライアント側でJavaScriptを使用してリクエストしたい:

function hideThreadCompletely(threadId, board) {
    $.getJSON("/api/hide/thread/"+board+"/"+threadId, function(data) {
        $('#thread-'+threadId).hide();
    });
}

しかし@{ApiHideTHreadR}、Yesod はコンパイル時に引数を必要とするため、使用できません。API URL を次のように表示したい場合とそうでない場合、これに対する適切な解決策は何api/board/1/1ですかapi/board?bid=1&tid=1? 手動で定義された URL のようなものを使用し続けます"/api/hide/thread/"+board+"/"+threadIdか?

4

3 に答える 3

1

タイプ セーフなルートを使用して、実行時にのみ認識されるものをコンパイル時にチェックすることはできません。あなたもこれを知っていると思いますが、それが私があなたの質問から理解できる唯一の意味です. したがって、唯一のオプションは手動で行うことです。

于 2013-09-28T12:24:23.023 に答える
1

私がいつもしていることは、ルート呼び出しで渡す明示的なパラメーターを取り除き、代わりに次のように置き換えることです。

getApiHideThreadR::Handler JSON
getApiHideThreadR = do 
  rawTextParam <- lookupGetParam "text"
  rawThreadId  <- lookupGetParam "table"
  (textParam,threadParam) <- someParseFunction rawTextParam rawThreadId
  ... 

次に、通常の ajax スタイルを使用できます。

$.getJSON("@{ApiHideThreadR}",{text:"sometext",tabe:"sometable"},success()...

より複雑な get to haskell タイプのリクエスト: https://github.com/yesodweb/yesod/wiki/Convert-get-params-into-a-haskell-record

素敵なテンプレです。

于 2013-09-27T15:09:44.070 に答える