Загрузка файла JSON в JSON-Store не работает
Ниже вы можете увидеть мой функционал входа в систему, который на самом деле работает. Но он не загружает предоставленный файл json сервером в JSON Store.
"console.log(" Сохранить до загрузки ",UserStore)" и "console.log(" Сохранить после загрузки ",UserStore)" показывает одно и то же сообщение, поэтому я предполагаю, что "UserStore.load(jsonRes)" не работает все. Я также попробовал "UserStore.loadData(jsonRes)" и "UserStore.loadRawData(jsonRes)", которые оба не работают ни одна (Ошибка: Uncaught TypeError: Object[object Object] не имеет метода "loadDataRaw"). Не могли бы вы объяснить мне, как решить эту проблему? Большое спасибо.
Ext.util.JSONP.request({
url: 'http://127.0.0.1:4712/talentcommunity/getuserinfo',
headers: {
'content-type': 'application/x-www-form-urlencoded ; charset=utf-8'
},
method: 'post',
params: {
user:data1,
pw:data2
},
callbackName: 'myCallback',
success: function (response) {
var loginResponse = response;
if (loginResponse.msg == "OK") {
var UserStore = Ext.create('Ext.data.Store', {
model: 'Sabine.model.user',
data: response.user
});
me.signInSuccess();
}
else{
loginView.showSignInFailedMessage('token null.');
}
},
Предоставленный файл Json выглядит следующим образом:
{msg: "OK", user: Object}
Сам пользователь 'выглядит так: {"token":"ee80d56688fb7d3a8bcf5939fc9cbcf1","title":"","login":"bmuster","facebookId":"","firstName":"Bertha","lastName":"Muster","nationality":"GM","birthDay":"12/09/82","phone":"+4989111111","mobile":"+4918111111","street":"Musterstra\ufffde 11","city":"Musterstadt","zipCode":"66666","willingToTravel":"","pictureUrl":"","eMail":"bmuster@example.com","publicList":[]}
Мой магазин определяется следующим образом:
Ext.define('Sabine.store.MyJsonPStore', {
extend: 'Ext.data.Store',
requires: [
'Sabine.model.user'
],
config: {
autoLoad: true,
autoSync: true,
clearOnPageLoad: false,
model: 'Sabine.model.user',
storeId: 'myStore'
}
});
Соответствующая модель:
Ext.define('Sabine.model.user', {
extend: 'Ext.data.Model',
config: {
fields: [
{
name: 'token',
type: 'string'
},
{
name: 'title'
},
{
name: 'login'
},
{
name: 'facebookId'
},
{
name: 'firstName',
type: 'string'
},
{
name: 'lastName',
type: 'string'
},
{
name: 'nationality',
type: 'string'
},
{
name: 'birthDay',
type: 'string'
},
{
name: 'phone'
},
{
name: 'mobile'
},
{
name: 'street'
},
{
name: 'city',
type: 'string'
},
{
name: 'zipCode',
type: 'int'
},
{
name: 'willingToTravel'
},
{
name: 'pictureUrl'
},
{
name: 'eMail'
},
{
name: 'publicList'
}
]
}
});
Пример просмотра:
Ext.define('Sabine.view.MeinAccount', {
extend: 'Ext.Container',
alias: 'widget.accview',
config: {
maxHeight: 480,
maxWidth: 320,
items: [{
xtype: 'tabpanel',
height: 430,
maxHeight: 480,
items: [
{
xtype: 'list',
title: 'Allgemein',
iconCls: 'home',
modal: false,
deferEmptyText: false,
itemTpl: [
'<table border = "0">',
'<tr>',
' <td>Firstname</td>',
' <td>{firstName}</td>',
' <td>Last<name/td>',
' <td>{lastName}</td>',
'</tr>',
'<tr>',
' <td>Nationality</td>',
' <td>{nationality}</td>',
'</tr>',
'</table>'
],
store: 'Sabine.store.UserStore'
},
2 ответа
Пару мыслей о вашей проблеме:
- у тебя есть поле
publicList
это не заявлено в вашей модели store.load
не принимает экземпляр модели, наоборот - загружает в ваше локальное хранилище данные с сервераstore.loadData
или жеstore.loadRawData
это ваш путь, однако упомянутое вами сообщение (Uncaught TypeError: Object[object Object] не имеет метода..) указывает на то, что вы не успешно получили экземпляр хранилища. Для этого вы должны сначала создать экземпляр магазина, а не просто объявить его; использованиеExt.create
метод для этого- если твой
loginResponse.user
уже в формате JSON, вы не должны использоватьExt.JSON.encode
Тебе стоит попробовать
success: function (response) {
var loginResponse = response.responseText;
....
}