Я пытаюсь создать простую пользовательскую настройку для моего школьного проекта.
Я создал модель данных, как так:Ext JS 4 обратный вызов загрузки
Ext.define('Urlopy.Model.UserPreferences', {
extend : 'Ext.data.Model',
idProperty : 'userID',
fields : [{
name : 'userID',
type : 'string'
}, {
name : 'admin',
type : 'bool'
}]
});
и магазин, как это:
Ext.define('Urlopy.Store.UserPreferences', {
extend : "Ext.data.Store",
autoLoad : false,
autoSync : true,
batch : false,
proxy : {
type : 'ajax',
sortParam : undefined,
startParam : undefined,
pageParam : undefined,
limitParam : undefined,
noCache : false,
headers : {
"Content-Type" : "application/json; charset=utf-8"
},
api : {
read : 'services/UserPreferences.asmx/Get',
update : 'services/UserPreferences.asmx/Update'
},
reader : {
type : 'json',
root : 'd.data'
},
writer : {
type : 'json',
encode : false,
writeAllFields : true,
root : 'data'
}
},
model : 'Urlopy.Model.UserPreferences'
});
В моем приложении, когда пользователь входит в систему я хотел бы получить его предпочтения.
У меня есть функция, например, так:
onLogin : function() {
this.createGlobalStores();
this.userPreferenceStore.load({
callback : function(r, options, success) {
console.log(r.data)
}
});
},
createGlobalStores : function() {
this.userPreferenceStore = Ext.create("Urlopy.Store.UserPreferences");
},
То, что я хотел бы сделать в функции обратного вызова, чтобы получить идентификатор пользователя и отображать его, даже используя простое предупреждение.
Прямо сейчас все, что я получаю, не определено, что показано в firebug.
Мои данные JSON от сервера выглядит следующим образом:
{"d":{"__type":"Urlopy.services.UserPreference","userID":"12445","admin":true}}
Мне нужно, чтобы иметь возможность вызвать метод нагрузки на этом магазине и в обратном вызове получить конкретное свойство от модели. В моем магазине всегда будет 1 товар! (есть ли другой способ сделать это?)
Любые идеи о том, почему это не работает, приветствуются!
EDIT Я изменил мой сценарий сервера вернуть JSON как это:
{"d":{"data":{"userID":"12-44-55","admin":true}}}
Это прекрасно работает, не было никакой необходимости добавлять дополнительные [] вокруг объекта.
Хм .. Я исправлю это сразу? Есть ли другие возможности для загрузки этого объекта вместо массива? Я знаю, что я могу использовать Store, но может быть, есть другой способ? – Misiu
Спасибо за это редактирование :) то, что я хотел бы иметь, - это глобальный объект, содержащий всю конфигурацию пользователя, и я смогу прочитать настройки и обновить их. Мне удалось это сделать. Я отредактировал свой вопрос с моим решением, основанным на вашем. – Misiu