Помогите с видимостью
filter = {
cache : {},
type : '',
init : function ( type ) {
this.type = type;
// Данные не закешированы
if ( typeof this.cache[this.type] == 'undefined' ) {
// Пошел jQuery post
$.post('page.php',null,function(data){
filter.updateCache ( data, filter.init );
},'json');
}
},
updateCache : function ( data, callback ) {
this.cache[this.org] = new Array();
for (var i in data) if (data.hasOwnProperty(i)) {
this.cache[this.type].push( data[i] );
}
callback( this.type );
}
}
window.onLoad=function() { filter.init('one'); }
Помогите разобраться. Я тут вкратце свой код привел. Работу с объектами в JS только сегодня начал осваивать. Я хочу данные, получаемые в JSON через jQuery.post(), закешировать в объекте filter.cache , в дальнейшем загружать не через AJAX, а из объекта. Так вот после вызова `callback( this.type );` `this.cache` становится `undefined`. Ну и если подскажите более удачное решение, будет круто :) |
Сколько заплатите?
|
filter=function(type){
this.init(type);
}
$.extend(filter.prototype,{
cache:{},
type:'',
init : function ( type ) {
this.type = type;
cache = this.cache;
if ( typeof this.cache[this.type] == 'undefined' ) {
$.getJSON(
'page.php',
function(resp){
cache[type]=resp;
}
)
}
},
})
window.onLoad=function() { new filter('one'); }
Возможны ошибки. Писал с головы. Работоспособность не проверял. Но как идея думаю сгодиться. Функция getJSON возвращает JSON уже в "нужном виде". Т.е. не нужно прогонять через eval()/ |
2Gozar: 0 рублей 00 копеек.
2MaxB: С распознанием JSON у меня проблем никаких. Не пойму почему this.cache из объекта становится undefined. |
Цитата:
http://javascript.ru/tutorial/object/thiskeyword |
| Часовой пояс GMT +3, время: 10:01. |