PDA

View Full Version : }がload時の {params: {start: 0, limit: 20}ききません



fudaozhenchu@gmail.com
25 May 2009, 4:59 PM
お世話になります。以下のコードでページングを行っております。
load時のlimitとToolbarのpageSizeを20に設定しているのですが、

load時に全件読み込まれてしまい、この状態でページングの「次へ」ボタンを
押しても全件表示されたままで次の20件へ遷移せずに困っております。
恐縮ですが、どこかにコードのミスや足りない記述があればヒントを頂ければ幸いです。

Ext.onReady(function() {
// s.gif設定
Ext.BLANK_IMAGE_URL = "ext/resources/images/default/s.gif";
// クイックチップス初期化
Ext.QuickTips.init();

//Ext.data.JsonReaderオブジェクトの生成
var NotImportedFilesNameReader = new Ext.data.JsonReader({
//全体件数のプロパティ名
totalProperty: "totalCount",
//行データの配列名
root: "array",
//各フィールドの設定
fields: [
{name: "id", type: "int"},
{name: "filesname", type: "string"}
]
});

//Ext.grid.CheckboxSelectionModelオブジェクトの生成
var NotImportedFilesNameCheckbox = new Ext.grid.CheckboxSelectionModel();

//Ext.grid.ColumnModelオブジェクトの生成
var NotImportedFilesNameColumns = new Ext.grid.ColumnModel([
//チェックボックスの表示
NotImportedFilesNameCheckbox,

//フィールド定義
{id: "id", header: "番号", width: 80, dataIndex: "id"},
{id: "filesname", header: "ファイル名", width: 100, dataIndex:
"filesname"}
]);

//Ext.data.Storeオブジェクトの生成
var NotImportedFilesNameDataStore = new Ext.data.Store({
//データ取得元URLの指定
proxy: new Ext.data.HttpProxy({

url: "./feature/notimportedfilesname.php", method: "POST"}),
reader:
NotImportedFilesNameReader
});

//Ext.PagingToolbarオブジェクトの生成
var NotImportedFilesNameToolbar = new Ext.PagingToolbar({
//1ページあたり表示件数
pageSize: 20,

//適用先データ
store: NotImportedFilesNameDataStore,
//メッセージ設定

displayInfo: true,
displayMsg: "{2} 件中の {0} 件から {1} 件までを表示しています。",
emptyMsg: "未取込のデータはありません。",
});

//Ext.grid.GridPanelオブジェクトの生成
var NotImportedFilesNameGrid = new Ext.grid.EditorGridPanel({
//表示するデータ
store: NotImportedFilesNameDataStore,
//フィールド定義
cm: NotImportedFilesNameColumns,

//追加フィールド定義
sm:NotImportedFilesNameCheckbox,
//折り畳み時のアニメーション
animcollapse: true,
//折り畳み初期設定
collapsed: false,
//折り畳みボタンの表示
collapsible: true,
//タイトルバークリックによる折り畳み
titleCollapse: true,
//グリッドの幅
autoWidth: true,
//width: 800,
//グリッドの高さ
//autoHeight: true,
height: 500,
//タイトル
title: "未取込のファイル一覧",
//ID
renderTo: "grid-container",
//編集に必要なクリック数
clicksToEdit: 2,
//ボトムバーの表示

bbar: NotImportedFilesNameToolbar,
//ボタン
buttons: [
{text: "キャンセル", handler: cancel},
{text: "更新",handler:update}
]
});

//データの読み込み(パラメータ指定)
NotImportedFilesNameDataStore.load({params: {start: 0, limit: 20}});

//キャンセル押下時
function cancel() {
NotImportedFilesNameDataStore.reload();
}

//更新押下時
function update() {
Ext.MessageBox.show({
title: "更新ボタン押下",
msg: "更新ボタンが押されました。",
buttons: Ext.MessageBox.OK,
icon: Ext.MessageBox.INFO
});
}
});

amanoman
25 May 2009, 8:04 PM
storeを生成したgridから取得して、loadイベントを実行してみてください。


// データの読み込み(パラメータ指定)
NotImportedFilesNameDataStore.load({
params : {
start : 0,
limit : 20
}
});

       ↓


// データの読み込み(パラメータ指定)
NotImportedFilesNameGrid.getStore().load({

params : {
start : 0,
limit : 20
}
});

fudaozhenchuさんのロジックでテストはしていませんので、あしからず。


本題とは関係ありませんが、以下の構文の最後から2行目にカンマが多いです。(IEでエラーになります。)


// Ext.PagingToolbarオブジェクトの生成
var NotImportedFilesNameToolbar = new Ext.PagingToolbar({
// 1ページあたり表示件数
pageSize : 20,
// 適用先データ
store : NotImportedFilesNameDataStore,
// メッセージ設定
displayInfo : true,
displayMsg : "{2} 件中の {0} 件から {1} 件までを表示しています。",
emptyMsg : "未取込のデータはありません。"
,
});

fudaozhenchu@gmail.com
26 May 2009, 3:29 AM
早速ご返信ありがとうございます。

試してみたのですが、現象は変わらずやはり全件が出力された状態になりました。
画像を添付させて頂きましたが、出力件数が多いのは問題となるでしょうか?

申し遅れましたが環境はWindows Vista上で動かしております。

fudaozhenchu@gmail.com
26 May 2009, 6:45 AM
JSONデータを確認しましたが、
{"totalCount": "3325","array": [{"id":1,"filesname":"19900101.csv"},・・・・

という感じでtotalCountの値は設定されております。
むーん。

amanoman
26 May 2009, 11:56 AM
サーバーサイドではリクエストされたstart,limitで指定した件数分だけのデータを返す様になっていますか?
{"totalCount": "3325","array": [{"id":1,"filesname":"19900101.csv"},..]←ここにtotalCount分のデータがセットされていませんか?

fudaozhenchu@gmail.com
27 May 2009, 6:23 AM
大変申し訳ありません。
ご指摘の通り、JSON文字列の後ろに全件が常に出力されてしまっておりました。
ページング処理の際にPOSTでデータを受け取ってデータを切り出している部分の
ソースに問題がありました。

array_slice関数の引数をページングのstartとlimitとすることで
解決いたしました。

今回はどうもありがとうございました。

taiman
24 Mar 2011, 7:27 AM
はじめまして。ExtJS初心者です。

私も同様の事象で困っていますが、
サーバサイドで使用している言語は、PHPではなく、Javaとなります。

Javaの場合、start、limitの値をどのように受け取ればよいでしょうか?

SAStruts+JSONIC で構成しております。

【参考URL】
[SAStruts][ExtJS][JSONIC] Full Ajax な CRUD アプリケーション
http://d.hatena.ne.jp/TsutomuUchima/20080911/p1

codeなにがし-SAStruts(Super Agile Struts)あれこれ
http://code.nanigac.com/source/wiki/view_title/597/Ajax%E3%81%A7JSON%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86

matsuoka
2 Apr 2011, 5:20 PM
StoreのproxyプロパティがDirectProxyでない前提ですが、
startとlimitのフィールドを持つActionFormを作れば受け取れます。

受け取る場合は、HTMLからSubmitする場合と同じ要領でパラメータの受け取りができたと思います。

taiman
4 Apr 2011, 6:14 AM
matsuokaさん

ご指摘いただいたとおり、ActionFormでパラメータ受け取りできました。
ご回答ありがとうございました。