Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструктор массива объектов и работа с ними через localStorage (https://javascript.ru/forum/misc/59186-konstruktor-massiva-obektov-i-rabota-s-nimi-cherez-localstorage.html)

pepel266 31.10.2015 14:01

Конструктор массива объектов и работа с ними через localStorage
 
Добрый день, есть вот такой код:
//конструктор объекта....
function BaseObj(){
	this.name = nameCase();
	this.rest = checkCache();
}
//конструктор массива объектов
function ArrBase(){
	var datBaseArr = [];
	var length = prompt('кол - во объектов:',1);
	if(!isNumeric(length)){
		ArrBase();
	}
	for(var i = 0;i < length;i++){
		datBaseArr.push(new BaseObj());
	}
	return datBaseArr;
}
//создание локальной базы данных на основе конструктора объектов.
localStorage.setItem('bases',JSON.stringify(ArrBase()));


Вопрос мой в следующем, нужна подсказка по доработке конструктора для работы с отдельными объектами из массива.
Допустим создано и записано в localStorage 3 объекта:
{name:молоко,rest:8}
{name:картошка,rest:3}
{name:кирпич,rest:7}
Как мне получить доступ к любому из них в отдельности и после манипуляций с ним изменения сохранились в localStorage?

ruslan_mart 31.10.2015 15:04

pepel266, никак, в локальное хранилище записывается всегда строка. Т.е., чтобы что-то изменить, мы получаем строку, преобразуем в объект, что-то меняем, преобразуем обратно в строку и записываем назад.

Если Вы хотите, чтобы при каждом изменении свойств объекта оно автоматически обновлялось в хранилище, то придётся вешать сеттеры.

pepel266 31.10.2015 15:58

Цитата:

Сообщение от Ruslan_xDD (Сообщение 393843)
[b]то придётся вешать сеттеры.

Можно подробнее? Я только изучаю JS и не все сразу сходу понимаю....
Не совсем разобрался с "конструкторами и прототипами"
Подскажите в каком направлении двигаться в расширении конструктора BaseObj()?

ruslan_mart 31.10.2015 17:14

pepel266, лучше так:

function storageObject(itemName) {
	var object = window.localStorage.getItem(itemName);
	this.itemName = itemName;
	this.data = object ? JSON.parse(object) : {};
};
storageObject.prototype.remove = function() {
	window.localStorage.removeItem(this.itemName);
};
storageObject.prototype.save = function() {
	window.localStorage.setItem(this.itemName, JSON.stringify(this.data));
};




var base = new storageObject('base');

base.data.foo = 'bar';
base.data.one = 'two';
base.data.bla = {};

base.save();

pepel266 31.10.2015 18:08

Спасибо!

Vlasenko Fedor 31.10.2015 18:16

Ruslan_xDD,
Цитата:

Сообщение от Ruslan_xDD
this.data = object && JSON.parse(object) || {};

this.data здесь чему будет равно ?

pepel266 31.10.2015 18:31

Как я понял тому,что вы запишите в base.data, например:
base.data.foo = ArrBase();
будет создан объект foo в котором будет массив объектов созданных с помощью ArrBase().

рони 31.10.2015 18:58

pepel266,
http://javascript.ru/forum/project/2...s-obektom.html

FINoM 31.10.2015 19:16

рони, прикольно, что кто-то помнит о моей древней поделке.

Последний коммит сделан давно, да и тестов нету. Несмотря на эти минусы, недавно заюзал эту штуку снова, работает хорошо. Вот репка.

Vlasenko Fedor 31.10.2015 19:56

Цитата:

Сообщение от FINoM
прикольно, что кто-то помнит о моей древней поделке

так может пора переписать с учетом нынешних знаний, на гетерах сеттерах, добавить подписку на события
defaultDuration - че за зверь?

FINoM 31.10.2015 20:05

Цитата:

Сообщение от Poznakomlus
так может пора переписать с учетом нынешних знаний, на гетерах сеттерах, добавить подписку на события
defaultDuration - че за зверь?

Да, есть мысль запилить адекватную документацию и допилить функцию, приоритет только невысокий.

defaultDuration - это количество миллисекунд, интервала сохранения в хранилища. Вот здесь подробнее: http://habrahabr.ru/post/144998/

Vlasenko Fedor 31.10.2015 20:11

не я об этом defaultDuration = 5000;
self.duration = duration || defaultDuration;
defaultDuration больше нигде не используется
комментариев нет, чего сразу не
self.duration = duration || 5000; //так гораздо понятнее и без comments

FINoM 31.10.2015 20:12

Poznakomlus, понял. Значит, это опечатка.

Vlasenko Fedor 03.11.2015 02:19

Прошу потестировать
Цитата:

Pабота с localstorage, подписка на события localstorage, хранение функций, массивов и объектов в localstorage, интерфейс подписки, что позволяет передать параметры подписчикам (открытым вкладкам браузера), передать и выполнить в них переданные функции
localstorage

nerv_ 03.11.2015 09:11

почувствуй разницу :)

https://yadi.sk/i/LhzJNP5FkCHmp
https://yadi.sk/i/nRhKDJL8kCHiz

https://yadi.sk/i/FXT4RxIGkCHxV

---

Poznakomlus, сейчас читаю твои комментарии к коммитам. Что получается:

https://github.com/Poznakomlus/local...commits/master
Цитата:

"My First commit"
"first commit"
"My First commit"
"My First commit"
"My First commit"
"first commit"
"My First commit"
"My First commit"
"Добавил примеров"
"Поправил имена файлов"
"Create readme"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
"Мелкие правки"
1. проект собирается из "My First commit" и "Мелких правок" :)
2. отдельно хотелось бы отметить "My First commit" восемь раз)))

Vlasenko Fedor 03.11.2015 12:10

Цитата:

Сообщение от nerv_
почувствуй разницу

Спасибо :)

Mаxmaxmаximus 04.11.2015 18:30

nerv_, у меня погляди https://github.com/Maxmaxmaximus/gul...commits/master :lol:


Часовой пояс GMT +3, время: 18:19.