2017-01-20 2 views
1

Googleなどの検索に時間を費やしました。 al。答えは、それは簡単ですが、あなたはどのようにnextPageTokenを使ってGmailのAPIを使ってページネーションを作成しますか?私が今までしてきたことは、ページネーションを(前後に)働かせることはできません。GMailページネゴシエーションnextPageTokenの使用

「許可されたユーザー」と私は

gapi.client.load('gmail','v1',displayInbox); 

その後、

function displayInbox(){ 
    var request = gapi.client.gmail.users.messages.list({ 
    'userId':'me', 
    'maxResults':10, 
    }); 

    request.execute(function(response){ 
    $.each(response.messages,function(){ 
     var messageRequest = gapi.client.gmail.users.messages.get({ 
     'userId':'me', 
     'id':this.id 
     }); 
     messageRequest.execute(appendMessageRow); 
    }); 
    }); 
} 

appendMessageRowは、単に、例えばテーブルでリストをレイアウト呼び出す右のスコープとのアクセスを想定

function appendMessageRow(message){ 
    var txt = '<tr>'; 
    txt +='<td>'+getHeader(message.payload.headers, 'From')+'</td>'; 
    txt +='<td>'; 
    txt +='<a href="#message-modal-'+ message.id +'" data-toggle="modal" id="message-link-' + message.id+'">' +getHeader(message.payload.headers, 'Subject') +'</a>'; 
    txt +='</td>'; 
    txt +='<td class="text-xs-right">'+moment(parseInt(message.internalDate)).format('HH:mm')+'</td>'; 
    txt +='</tr>'; 
    $('table tbody').append(txt); 
} 

私は私がやると行う必要があることはできませんどのようなオブジェクトのキーとしてnextPageTokenを参照してくださいrequest.executeをCONSOLE.LOG改ページボタンを追加している - messageRequest.executeはnextPageTokenに合格しないプラスがあるとは思えません'previousPageToken'を作成/取得する方法。

申し訳ありませんがシンプルですが、それは私ですか、それ以上にはそれ以上ですか? GMail APIのドキュメントは、この件に関して非常に貧弱(私にとって)のように見えますが、私が助けるstackoverflowの回答は見つかりませんでした。

要約すると、ページ分割ボタンを追加し、適切な変数を渡してdisplayInbox()を呼び出す/呼び出す方法を説明します。

ありがとうございます

答えて

0

すべてのリクエストに次のページトークンを保存し、次のリクエストで使用できます。応答に次のページトークンがない場合、あなたはすべてのメッセージを受け取ったことを知っています:

function listMessages(pageToken) { 
    return new Promise(function(resolve) { 
    var options = { 
     userId: 'me', 
     maxResults: 10 
    }; 
    if (pageToken) { 
     options.pageToken = pageToken; 
    } 
    var request = gapi.client.gmail.users.messages.list(options); 
    request.execute(resolve); 
    }); 
} 

function getMessage(message) { 
    return new Promise(function(resolve) { 
    var messageRequest = gapi.client.gmail.users.messages.get({ 
     userId: 'me', 
     id: message.id 
    }); 
    messageRequest.execute(resolve); 
    }); 
} 

var pageToken; 
function displayInbox(){ 
    listMessages(pageToken).then(function (response) { 
    if (response.nextPageToken) { 
     pageToken = response.nextPageToken; // Get the next page next time 
    } else { 
     console.log('No more pages left!'); 
    } 
    if (response.messages) { 
     Promise.all(response.messages.map(getMessage)).then(function (messages) { 
     messages.forEach(appendMessageRow); 
     }); 
    } 
    }) 
} 
+0

Tholle - これはTYページネーションが「前方」に行くという意味ですが、古い 'nextPageTokenが更新される前に - 残念ですが厚い音(まあ私は:))。私はdisplayInbox()内のconsole.logに '古いものと新しいもの'のトークンを取得できますが、リストを返すためにそれらを取得することはできません(つまり、古い/最後のトークン)新しいトークンは常にそれを上書きしますお願いします? –

+0

@RussellParrott APIで後方に改ページすることはできません。ページを転送するときにAPIから各ページを格納し、APIを呼び出さずに後ろに移動するときに古いページを再度挿入することができます。 – Tholle

+0

Tholle - 私はあなたが前にAPIで後方に改ページすることはできません - それは、それがMrGであると仮定して「ページネーション」と呼ばれています。 OKは変数を '保存'するために適切な場所を得ようと時間を費やしましたが、役に立たなかったので、保存するのに最適な場所として2行を追加してください/私はfirebaseを使用して更新しますクイック&シンプル。とても感謝しています - –

関連する問題