如何从 SenCha Touch 中的商店检索数据

Posted

技术标签:

【中文标题】如何从 SenCha Touch 中的商店检索数据【英文标题】:How to retrieve data from a store in SenCha Touch 【发布时间】:2014-04-04 04:47:25 【问题描述】:

现在我有我的商店:stuStore 设置,其中包含一些模型数据。 我有另一个页面是谷歌地图。

学生数据结构: 名称、地理位置、价值等......

我想根据他们在 stuStore 内的位置在谷歌地图上显示每个学生的信息。

顺便说一句,这里是代码:

Ext.define('myapp.view.Main', 
    extend: 'Ext.tab.Panel',
    xtype: 'main',
    fullscreen: true,
    requires: [
        'Ext.TitleBar',
        'Ext.Video',
        'Ext.Map',
        'Ext.Panel',
        'Ext.tab.*',
        'Ext.*'
    ],
    config: 
        tabBarPosition: 'bottom',

        items: [
            
                title: 'myapp',
                iconCls:'maps',
                xtype: 'map',
                useCurrentLocation: true,
                store: 'myapp.store.stuStore'
            

我该怎么做?

提前致谢。


更新 1:

var mapdemo = Ext.create('Ext.Map', 
    mapOptions: 
        center: new google.maps.LatLng(-37.73228, 144.86900),  //nearby San Fran
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        navigationControl: true,
        navigationControlOptions: 
            style: google.maps.NavigationControlStyle.DEFAULT
        
    ,
    title: 'MyApp',
    iconCls: 'maps',
    fullscreen: true,
    xtype: 'map',
    id: 'mainMap',
    useCurrentLocation: false,
    listeners: 
        maprender: function (comp, googleMap) 
            var store, latlng, marker;
            store = Ext.getStore('myapp.store.stuStore');

            store.each(function (record, index, length) 
                latlng = new google.maps.LatLng(record.get('Lat'), record.get('Lng'));

                marker = new google.maps.Marker(
                    position: latlng,
                    map: this
                );
            );     
        

    
),
    infowindow = new google.maps.InfoWindow(
        content: 'Sencha HQ'
    );


Ext.define('myapp.view.Main', 
    extend: 'Ext.tab.Panel',
    xtype: 'main',
    fullscreen: true,
    config: 
        tabBarPosition: 'bottom',
        items: [mapdemo],
    
);

这是我在 view\Main.js 中更新的代码

但我没有得到任何标记,并且一直抛出错误:

未捕获的类型错误:无法调用未定义的方法“每个”

顺便说一句,停靠在屏幕底部的工具栏上的图标也不见了。

请指点我正确的方向,谢谢~~~

【问题讨论】:

你好???有人可以帮我吗?真的是菜鸟问题,但请帮忙~~~ thx 朋友们好~~~欢迎任何意见/建议或答案~~~请说点什么~~ 【参考方案1】:

您可以通过在 maprender 事件回调中循环它们来基于商店记录创建标记,如下所示:

Ext.define('myapp.controller.MapController', 
    extend: 'Ext.app.Controller',
    config: 
        refs: 
            mapComponent: 'main map'
        ,
        control: 
            mapComponent: 
                maprender: 'onMaprender',
            
        
    ,
    onMaprender: function(mapComponent, googleMap) 
        var store, latLng, marker;

        // Get store
        store = Ext.getStore('myapp.store.stuStore')

        // On each store record
        store.each(function(record, index, length) 

            // Get position
            latLng = new google.maps.LatLng(record.get('lat'), record.get('lng'));

            // Create marker
            marker = new google.maps.Marker(
                position: latLng,
                map: googleMap
            );
        );
    
);

看看我整理的this Sencha Fiddle。

【讨论】:

您好 M165437,非常感谢您的回复!!!真的!我是否需要做类似的事情:googleMap.draw(marker); ???我刚刚看到标记已初始化但从未使用过。再次感谢!!! 您好 Franva,标记应该会自动添加到地图中。我建议您查看Sencha Touch map example,也可以在您的 Sencha Touch SDK 的示例文件夹中找到。您是否在正确的位置(纬度/经度)寻找您的标记? 您好 M16,谢谢您的建议。我现在就去做,并尽快试一试,并随时通知您。再次感谢您的帮助!!!您是唯一回答我问题的人。我问错了吗?为什么没有其他答案? mapComponent 引用了Sencha Touch map component。它是谷歌地图的包装。 'main map' 就像这个组件的路径:'main' 是视图的 xtype,'map' 是 Sencha Touch 地图组件的 xtype。 maprender 事件在 Sencha Touch 地图组件上触发,回调有两个参数,为您提供组件和实际的谷歌地图。 我把这个Sencha Fiddle放在一起。看看吧!

以上是关于如何从 SenCha Touch 中的商店检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sencha Touch 中的商店之间同步

Sencha Touch:如何更新数据存储以从控制器列出

如何在sencha touch中将图像从商店动态绑定到轮播

如何从加载的商店 sencha touch 中删除额外参数

从其他商店访问商店 - Sencha Touch

在 Sencha Touch 1.1 中使用 AJAX 代理从商店中删除记录