Sencha touch 2 Store Dynamic Proxy Url

时间:2012-11-20 20:17:22

标签: javascript sencha-touch-2

我正在创建一个对地理位置有很高依赖性的应用程序。我在app.js中使用地理坐标设置变量'GeoApp.app.geoLat'和GeoApp.app.geoLong'。

如果我在任何视图中控制台。在访问和输出值时没有问题。在商店中,值为空,就好像它没有访问权限,或者可能没有定义或存在变量。

达到我想做的最佳做法是什么?

Ext.define('GeoApp.store.Places', {
    extend:'Ext.data.Store',

    config: {
        model:'GeoApp.model.Place',
        autoLoad:'true',
        proxy: {
            type:'ajax',
            url:'googleapiurl/json?location=' + GeoApp.app.geoLat + ','+ GeoApp.app.geoLong + '&radius=500...',
            reader: {
                type:'json',
                rootProperty:'results'
            }
        }*/
    }
})

2 个答案:

答案 0 :(得分:1)

这是因为您的商店是在应用启动时创建的,因此您的网址字符串也是如此。因此,当您启动应用时,GeoApp.app.geoLatGeoApp.app.geoLong为空或未定义,它们不会显示在您的网址中。

我要做的是将网址设置为googleapiurl/json?radiu=500...,然后将location参数添加为代理的extraParam,如下所示:

Ext.getStore('Places').getProxy().setExtraParams({
  location: GeoApp.app.geoLat + ',' + GeoApp.app.geoLong
});

希望这有帮助

答案 1 :(得分:0)

您可以执行的操作是在加载商店之前设置代理URL。因此,您必须将autoLoad设置为false。您可以使用下面的代码,例如,视图组件的show()函数。

show: function(component, options){
    var store = Ext.getStore('Places');

    store.setProxy({
       url:'googleapiurl/json?location=' + GeoApp.app.geoLat + ','+ GeoApp.app.geoLong + '&radius=500...',
    });

    store.load();
}
祝你好运!