[extjs]关于动态修改store中data和fields的问题

jxdz232601 2014-02-19 02:35:11
        var mystore = Ext.create('Ext.data.JsonStore', {
fields: [
{name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'},
'value'
],
data: [
{"name":"2014-02-18 12:10:00","value":1567.98},
{"name":"2014-02-18 12:15:00","value":1667.11},
{"name":"2014-02-18 12:20:00","value":1708.76},
{"name":"2014-02-18 12:25:00","value":1622.98},
{"name":"2014-02-18 12:30:00","value":1615.35},
{"name":"2014-02-18 12:35:00","value":1652.07},
{"name":"2014-02-18 12:40:00","value":1706.75},
{"name":"2014-02-18 12:45:00","value":1688.16},
{"name":"2014-02-18 12:50:00","value":1766.28},
{"name":"2014-02-18 12:55:00","value":1811.68},
{"name":"2014-02-18 13:00:00","value":1786.61},
{"name":"2014-02-18 13:05:00","value":1759.81},
{"name":"2014-02-18 13:10:00","value":1721.8}
]
});
Ext.Ajax.request({
url: this.myurl,
async: false,
params: {
argu: this.myargu
},
success : function(response) {
var json = Ext.JSON.decode(response.responseText);
mystore.loadData(json.datas);
var myfields = [];
var mynamefield = [{name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'}];
myfields.push(mynamefield);
for(var k in json.datas[0]){
if(k == 'name') continue;
else {
myfields.push([k]);
}
}
alert(myfields[1]);
mystore.fields = myfields;
},
failure : function(request) {
Ext.MessageBox.show({
title : '操作提示',
msg : "连接服务器失败",
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
},
method : 'get'
});
this.items.store = mystore;



之前发过几个问题贴询问之类问题,但是竟然都没人回答我,经过我这两天的搜索,还是找到了一些方法,不过修改data的问题解决了,修改fields的问题还是没解决:

上面就是修改后的代码,一开始定义的mystore是我期望得到的store,这个store里面的data和fields由下面那个Ext.Ajax.request中获取。

一开始,我是用mystore.data = json.datas;这一句,将json数据传给store,但是失败了,后来查了下,应该是用mystore.loadData(json.datas);

对于fields,我在ajax里面定义了一个var myfields = []; 最终用mystore.fields = myfields;将myfields传给store,但是失败了,经过测试,发现这一句没有任何作用,mystore里面的fields还是之前的fields,一点都没变。是不是有专门的方法修改fields啊?
...全文
2764 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxdz232601 2014-02-19
  • 打赏
  • 举报
回复
        var myfields = [];
        var mydata = [];
        Ext.Ajax.request({
            url: this.myurl,
            async: false,
            params: {
                argu: this.myargu
            },
            success : function(response) {
                var json = Ext.JSON.decode(response.responseText);
                mydata = json.datas;

                var mynamefield = {name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'};
                myfields.push(mynamefield);
                for(var k in json.datas[0]){
                    if(k == 'name') continue;
                    else {
                        myfields.push(k);
                    }
                }
            },
            failure : function(request) {
                Ext.MessageBox.show({
                    title : '操作提示',
                    msg : "连接服务器失败",
                    buttons : Ext.MessageBox.OK,
                    icon : Ext.MessageBox.ERROR
                });
            },
            method : 'get'
        });
        alert(myfields[0]['name']);
        alert(myfields[1]);
        var mystore = Ext.create('Ext.data.JsonStore', {
            fields: myfields,
            /*fields: [
                {name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'},
                 'value'
            ],*/
        });
        mystore.loadData(mydata);
我2楼说之前我这么做之所以没有成功,是由于 var mynamefield = [{ name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'}]; 这一句写错了,我改成 var mynamefield = { name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'}; 这样就可以了。
jxdz232601 2014-02-19
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
Ext.Ajax.request({ url: this.myurl, async: false, params: { argu: this.myargu }, success: function (response) { var json = Ext.JSON.decode(response.responseText); var myfields = []; var mynamefield = [{ name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'}]; myfields.push(mynamefield); for (var k in json.datas[0]) { if (k == 'name') continue; else { myfields.push([k]); } } alert(myfields[1]); //mystore.fields = myfields; mystore = Ext.create('Ext.data.JsonStore', { fields: myfields, data: json.datas }); },
我也按照你的建议改出来了。 见下面的代码
Go 旅城通票 2014-02-19
  • 打赏
  • 举报
回复
Ext.Ajax.request({ url: this.myurl, async: false, params: { argu: this.myargu }, success: function (response) { var json = Ext.JSON.decode(response.responseText); var myfields = []; var mynamefield = [{ name: 'name', type: 'date', dateFormat: 'Y-m-d H:i:s'}]; myfields.push(mynamefield); for (var k in json.datas[0]) { if (k == 'name') continue; else { myfields.push([k]); } } alert(myfields[1]); //mystore.fields = myfields; mystore = Ext.create('Ext.data.JsonStore', { fields: myfields, data: json.datas }); },
jxdz232601 2014-02-19
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
重新创建store不就好了mystore = Ext.create('Ext.data.JsonStore' 楼主也太会省分了,20.。结贴返10,相当于10分问个问题。。
版主的的意思是,先定义出myfields和mydata,然后在定义store: var mystore = Ext.create('Ext.data.JsonStore', { fields:myfields, data:mydata }); 这样吗? 其实我也这么做过, 貌似还是不行,版主看看是不是我myfields创建的有问题啊 分的事嘛。。我不知道行情啊。。
Go 旅城通票 2014-02-19
  • 打赏
  • 举报
回复
重新创建store不就好了mystore = Ext.create('Ext.data.JsonStore' 楼主也太会省分了,20.。结贴返10,相当于10分问个问题。。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧