我在学习 ExtJS 时遇到了各种各样的问题(我是一个 flex 开发人员)。目前,我不确定如何从命令加载商店。我有一个命令,我可以在其中进行服务调用并获取数据。然后我想用这个数据加载模型(从命令内部)。
我的代码...
PhoneCallsLoadCommand.js:(命令)
Ext.define('DG.controller.PhoneCallsLoadCommand', {
extend: 'Ext.app.Controller',
stores: ['PhoneCalls'],
models: ['PhoneCall'],
views: [
'PhoneCallListView'
],
init: function () {
var url2 = "https://MyServiceURLWSDL";
var pl = new SOAPClientParameters();
pl.add("arg0", false);
SOAPClient.invoke(url2, "gePaymentsMethod", pl, true, getDataCallback);
function getDataCallback(response) {
// This is where I want to load the response data into the Model
var store = Ext.getStore('phoneCallsStore');
store.loadData(response);
}
}
});
以下是从服务调用返回的响应 XML 数据:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<dlwmin:getPaymentsMethod xmlns:dlwmin="http://blahblah.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<return>
<contents>
<eftAcctNo>501014635986</eftAcctNo>
<empSsn>122400724</eftAcctRoutNo>
</contents>
<contents>
<eftAcctNo></eftAcctNo>
<empSsn></eftAcctRoutNo>
</contents>
<contents>
<eftAcctNo></eftAcctNo>
<empSsn></eftAcctRoutNo>
</contents>
<status>0</status>
</return>
</dlwmin:getPaymentsMethod>
</soapenv:Body>
</soapenv:Envelope>
我需要将此响应数据填充到我的模型中,以便我可以在我的网格中使用它。
PhoneCall.js:(模型)
Ext.define('DG.model.PhoneCall', {
extend: 'Ext.data.Model',
config: {
idProperty: 'phoneCallModel',
fields: [
{name: "eftAcctNo", type: "string"},
{name: "empSsn", type: "string"}
]
}
});
PhoneCalls.js(商店)
Ext.define('DG.store.PhoneCalls', {
extend: 'Ext.data.Store',
config: {
storeId: 'phoneCallsStore',
model: 'DG.model.PhoneCall',
autoLoad: false
},
proxy: {
type: 'memory',
reader: {
type: 'xml',
record: 'contents',
//rootProperty: 'return'
}
},
listeners: {
'load' : function() {
console.log("Making Service Call...");
}
}
});
在命令中,当我这样做时:
var store = Ext.getStore('phoneCallsStore');
store.loadData(response);
我收到以下错误:未捕获的类型错误:无法调用未定义的方法“loadData”
有人能告诉我如何将响应数据加载到模型中吗?我的视图是一个指向模型的网格。
PhoneCallListView.js (查看)
Ext.define('DG.view.PhoneCallListView' ,{
extend: 'Ext.grid.Panel',
alias: 'widget.phoneCallListView',
title: 'Phone Calls DataGrid',
// we no longer define the Phone Calls store in the 'initComponent' method
store: 'PhoneCalls',
initComponent: function() {
this.columns = [
{header: 'Eft Acct No', dataIndex: 'eftAcctNo', flex:1},
{header: 'Emp Ssn', dataIndex: 'empSsn', flex:1},
];
this.callParent(arguments);
}
});
仅供参考 - 我无法让 Store 使用 ajax 代理进行服务调用,所以我发现使用 soapclient.js 很容易。谢谢