0

PHP を使用して取得した JSON から入力された GeoExt.data.FeatureStore/Ext.data.Store からフィーチャ (土地区画) の総数を取得する際に問題があります。合計数は、エラー メッセージ (フィーチャが返されない場合) または検索結果を含むウィンドウ (マップ) を表示する条件として使用されます。getTotalCount を使用しようとしましたが、取得した JSON に機能が含まれているかどうかに関係なく、0 が返されます。Ext JS バージョン 3.4.1。コード:

var store = new GeoExt.data.FeatureStore({
    layer: parcels,
    fields: [{
            name: "name"
        }
    ],
    proxy: new GeoExt.data.ProtocolProxy({
        protocol: new OpenLayers.Protocol.HTTP({
            url: "php/DB2GeoJSON.php",
            format: new OpenLayers.Format.GeoJSON()
        })
    })
});

var formPanel = new GeoExt.form.FormPanel({
    frame: true,
    title: "Search for parcels",
    protocol: new OpenLayers.Protocol.HTTP({
        url: "php/DB2GeoJSON.php",
        format: new OpenLayers.Format.GeoJSON()
    }),
    items: [{
            xtype: "textfield",
            name: "name",
            fieldLabel: "Parcel ID",
            value: ""
        }
    ],
    renderTo: "parcel_search",
    listeners: {
        actioncomplete: function (form, action) {
            json = Ext.util.JSON.decode(action.response.priv._object.responseText);
            features = action.response.features;
            store.loadData(features);
        }
    }
});

formPanel.addButton({
    text: "Search",
    handler: function () {
        this.search();
        var totalCount = store.getTotalCount();
        if (totalCount = "0") {
            Ext.Msg.alert("Alert", "No such parcel ID!");
        } else {
            new Ext.Window({
                title: "Search result"
                height: 400,
                width: 600,
                modal: true,
                layout: "border",
                draggable: false,
                resizable: false,
                closeAction: "hide",
                items: [{
                        region: "center",
                        id: "mappanel",
                        xtype: "gx_mappanel",
                        map: map,
                        split: true
                    }
                ]
            }).show();
        }
    },
    scope: formPanel,
    renderTo: "parcel_search"
})

どんな助けでも大歓迎です...

4

3 に答える 3

0

後で入力されたストアではなく、JSON から直接機能の数を取得しjson = Ext.util.JSON.decode(action.response.priv._object.responseText);、検索ボタンが押されたときに実行されるように追加することで、問題を解決することができました。また、フォームの初期定義に検索ボタンを追加し、コードの一部を別の関数として定義して、使いやすさを向上させました。

function mapDisplay() {
    var totalCount = json.totalCount;
    if (totalCount === 0) {
        Ext.Msg.alert("Alert", "No such parcel ID!");
    } else {
        new Ext.Window({
                title: "Search result",
                height: 400,
                width: 600,
                modal: true,
                layout: "border",
                draggable: false,
                resizable: false,
                closeAction: "hide",
                items: [{
                        region: "center",
                        id: "mappanel",
                        xtype: "gx_mappanel",
                        map: map,
                        split: true
                    }
                ]
            }).show();
    }
};

function searchParcel() {
    formPanel.search({
            success: function (form, action) {
                json = Ext.util.JSON.decode(action.response.priv._object.responseText);
                mapDisplay();
            }
        });
};

var formPanel = new GeoExt.form.FormPanel({
        frame: true,
        title: "Search for parcels",
        protocol: new OpenLayers.Protocol.HTTP({
                url: "php/parcel.php",
                format: new OpenLayers.Format.GeoJSON()
            }),
        items: [{
                xtype: "textfield",
                name: "name",
                fieldLabel: "Parcel ID",
                value: ""
            }
        ],
        buttons: [{
                text: "Search",
                handler: searchParcel
            }
        ],
        renderTo: "parcel_search",
        listeners: {
            actioncomplete: function (form, action) {
                features = action.response.features;
                store.loadData(features);
            }
        }
    });
于 2013-05-31T08:29:09.143 に答える
0

あなたの if 文が間違っています:

 if (totalCount = "0") {

次のようにする必要があります。

if (totalCount === 0) {

a=ba に等しい b
a==bは、a がある程度等しいかどうかをチェックします b ( 2=="2"-> true)
a==ba が等しいかどうかをチェックします b また、a と b の型 ( 2==="2"-> false)


store.getTotalCount()数値が返ってくると思います。そうでない場合、if ステートメントは次のようになります。

if (totalCount === "0") {
于 2013-05-22T13:08:19.323 に答える