2

Backbone.js を使用する CakePHP アプリケーションを (パートナーと共に) 開発しています。

したがって、基本的に、私の Cake アプリケーションは大部分が JSON API のように動作します。コントローラー アクションが特定のビューをロードした後 (データはまだレンダリングされていません)、Backbone は別のコントローラー アクションに AJAX 呼び出しを行い、データをフェッチします。コントローラーは JSON を返します。

(routes.php ファイルには mapResources と parseExtensions 行が配置されています)

コントローラーコード

public function index(){            
    $company_id = $this->Session->read('Company.id');
    $channel_ids = $this->Order->Channel->find('all', array('conditions' => array('Channel.company_id' => $company_id), 'fields' => array('Channel.id')));
    $channel_ids = Set::extract('/Channel/id', $channel_ids);        

    $data = $this->paginate('Order', array('Order.fulfillment_status_id' => 1, 'Order.channel_id' => $channel_ids));
    $this->set('orders', $data);
    //In case of a JSON request
    if($this->RequestHandler->ext == 'json') {           
        $this->autoRender = false;
        echo json_encode($data);
    }
}

これはうまくいきましたが、これでページネーションを実装しようとしたときに壁にぶつかりました。

  1. ページネーション リンクを生成するにはどうすればよいですか? (バックボーン経由で行う場合、データベース内の総レコード数がわからないため、生成するリンクの数がわからない)
  2. 「ページ番号」を AJAX 呼び出しにどのように焼き付ける必要がありますか? コントローラでどのように解読する必要がありますか?

本当にここで立ち往生しています。あなたの助けに本当に感謝します。

4

1 に答える 1

3

あなたのコントローラーで

$this->layout = false;
$this->RequestHandler->respondAs('json'); 
$recipes = $this->paginate('Recipe');
$this->set(compact('recipes'));

あなたの見解で

echo json_encode($recipes);
echo json_encode($this->Paginator->params());
于 2013-02-27T15:48:51.920 に答える