Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2010, 16:39
Новичок на форуме
Отправить личное сообщение для SiZE Посмотреть профиль Найти все сообщения от SiZE
 
Регистрация: 04.05.2009
Сообщений: 7

Помогите с видимостью
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`. Ну и если подскажите более удачное решение, будет круто
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2010, 17:13
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сколько заплатите?
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2010, 22:35
Интересующийся
Отправить личное сообщение для MaxB Посмотреть профиль Найти все сообщения от MaxB
 
Регистрация: 24.06.2009
Сообщений: 29

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()/

Последний раз редактировалось MaxB, 11.02.2010 в 22:38.
Ответить с цитированием
  #4 (permalink)  
Старый 12.02.2010, 08:02
Новичок на форуме
Отправить личное сообщение для SiZE Посмотреть профиль Найти все сообщения от SiZE
 
Регистрация: 04.05.2009
Сообщений: 7

2Gozar: 0 рублей 00 копеек.

2MaxB: С распознанием JSON у меня проблем никаких. Не пойму почему this.cache из объекта становится undefined.
Ответить с цитированием
  #5 (permalink)  
Старый 12.02.2010, 11:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от SiZE
filter.updateCache ( data, filter.init );
Потому что init вызывается не в контексте filter.

http://javascript.ru/tutorial/object/thiskeyword
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24
ССЫЛКИ (Помогите новичку) meggen (X)HTML/CSS 8 30.11.2009 10:51
Помогите доработать JS Dotoni (X)HTML/CSS 4 26.11.2009 20:59
помогите задать селектор! mkrylov jQuery 2 28.06.2009 20:34