Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 01.07.2012, 00:24
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Дык это ж закоммеченный блок, я уже понял что это не решение.
Ответить с цитированием
  #12 (permalink)  
Старый 01.07.2012, 00:29
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Подскажите плз ,как же правильно вывести данные?
Ответить с цитированием
  #13 (permalink)  
Старый 01.07.2012, 01:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

писалось на коленке, может не работать. ну, я проверил в консоли, на сайте JQ, работает
только хоть с JQ, хоть без неё, для старых браузеров нужно искать имплементацию JSON.stringify на JS.

сохраняем так :

http://api.jquery.com/jQuery.map/
var postIds, prefix = "post_id_", postsIds_key = "post_ids";

postIds = $.map(data, function (post) {
    var stringified = JSON.stringify(post);
    localStorage.setItem(prefix + post.id, stringified);
    return post.id;
});

postIds = JSON.stringify(postIds); // в принципе, можно было и join'ом

localStorage.setItem(postsIds_key, postIds);


достаем так:
var postIds, posts;
// prefix определён выше.
// postsIds_key тоже определён выше.

postIds = localStorage.getItem(postsIds_key);

if (postIds) {
    postIds = JSON.parse(postIds);

    posts = $.map(postIds, function (postId) {
        var post;
        post = localStorage.getItem(prefix + postId);
        post = JSON.parse(post);
        return post;
    });
} else { /* нет сохранённых ID'шников */ }
Ответить с цитированием
  #14 (permalink)  
Старый 01.07.2012, 02:05
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Хм...не совсем понятна эта строка:
var stringified = JSON.stringify(post);


Как мне быть в моем случае, ведь у меня как видели идет заполнение из JSON файла, содержание которог оя кинул...или мне достаточно попробовать воспользоватся вашим куском кода, отвечающим за вывод?

ЗЫ: попробовал - все равно [object] и андефайнд

Последний раз редактировалось Философ, 01.07.2012 в 02:08.
Ответить с цитированием
  #15 (permalink)  
Старый 01.07.2012, 11:51
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Философ
Хм...не совсем понятна эта строка:
var stringified = JSON.stringify(post);
переводит объект в JSON:
{
        "id": 1,
        "title": "Стремящийся наибольший",
        "body": "Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.",
        "tags": [
            "тег", "еще тег"
        ]
    }
// стало 
'{"id":1,"title":"Стремящийся наибольший","body":"Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.","tags":["тег","еще тег"]}'


Сообщение от Философ
Как мне быть в моем случае, ведь у меня как видели идет заполнение из JSON файла, содержание которог оя кинул...или мне достаточно попробовать воспользоватся вашим куском кода, отвечающим за вывод?
следовательно, код из "сохраняем так" записываем в обработчик события завершения запроса, в котором достаем JSON файл.
Ответить с цитированием
  #16 (permalink)  
Старый 01.07.2012, 12:41
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Хм...чтото нифига не выходит( Вообще теперь ничего не выводит и не происходит. Код стал таким:
// JavaScript Document
$(document).ready(function(){
		function isLocalStorageAvailable(){
				try {
					return 'localStorage' in window && window['localStorage'] !== null;
				} catch (e) {
					return false;
				}
			}
		try {
			//localStorage.setItem('foo', 'bar');
		} catch (e) {
			if (e == QUOTA_EXCEEDED_ERR) {
				alert('Локальное хранилище переполнено');
			}
		}
	$.getJSON(
		'json/posts.json',
		function(data){
		var prefix = "post_id", postsIds_key = "post_ids";
	  	$.each(data, function(postIndex, post) {
			localStorage.setItem('post_id'+post['id'], JSON.stringify(post));
			posts += localStorage['post_id'+post['id']];
		})
		var postIds, posts;
		// prefix определён выше.
		// postsIds_key тоже определён выше.

		postIds = localStorage.getItem(postsIds_key);

		if (postIds) {
		    postIds = JSON.parse(postIds);

		    posts = $.map(postIds, function (postId) {
		        var post;
		        post = localStorage.getItem(prefix + postId);
		        post = JSON.parse(post);
		        
		        return post;
		    });
		} else { /* нет сохранённых ID'шников */ }
		alert(post);
		var ololo = $.parseJSON(localStorage['post_id1']);
		//alert(ololo.title);
		alert(posts);

			$.each(posts, function(entryIndex, entry) {
					var post = '<article><header><h3>';
					post += entry['title']+'</h3></header><section><p>';
					post += entry['body']+'</p></section><footer>';
					if(entry['tags']){
						post += '<div id="tags">';
						$.each(entry['tags'], function(tagIndex, tag){
							post += '<span class="label">' + tag + '</span>'
						});
						post += '</div><div class="controls"><a class="btn btn-danger btn-mini">удалить</a></div>';
					}
					post += '</footer></article>';
					$('#posts').append(post);
       		 });
		});
		
});
Ответить с цитированием
  #17 (permalink)  
Старый 01.07.2012, 12:45
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

неправильно сохраняете. чтобы работало восстановление, нужно сохранять так же, как я написал. эти 2 куска кода взаимосвязаны
Ответить с цитированием
  #18 (permalink)  
Старый 01.07.2012, 12:52
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Хм...попробовал весь Ваш код вместо своего. Работает! Теперь тогда таков вопрос..внизу форму добавления поста..и кнопка удаления.. Как реализовать так, чтобы кнопка удаления удаляла именно свой пост?
Ответить с цитированием
  #19 (permalink)  
Старый 01.07.2012, 13:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

в атрибут записать ID поста, к которому она относится.

дальше просто удалить элемент (пост) со страницы, удалить его из хранилища, и подправить массив postIds :
если не исправлять массив postIds, тогда будем иметь в нём мёртвые ID'шники постов. оно Вам надо?
$delete_button.parents("article").remove(); // для начала удалим пост со страницы.
/*
 можно даже проанимировать

  $delete_button.parents("article").slideUp("slow", function () {
      $(this).remove();
  });
*/


var id = $delete_button.attr(...); // получим тут 3, например - ID поста, к которому относится кнопка. вместо троеточия пишем атрибут, в котором сохранён ID.

localStorage.removeItem(prefix + id); // удалим пост из хранилища

// теперь удалим значение из массива.
// postIds должен быть уже получен ранее.
var index = postIds.indexOf(id);

postIds.splice(index, 1); // удалили

// теперь сохраним измененный массив в хранилище. можно сразу
localStorage.setItem(postsIds_key, postIds);
Ответить с цитированием
  #20 (permalink)  
Старый 01.07.2012, 13:35
Интересующийся
Отправить личное сообщение для Философ Посмотреть профиль Найти все сообщения от Философ
 
Регистрация: 21.08.2010
Сообщений: 20

Спасибо! Сейчас попробую....и ещё 2 вопроса...Как сделать так, чтобы хранилище заполнялось базовыми данными из JSON файла, только первый раз, а потом, если уже заполнено - то не трогало его...и по поводу добавления поста..я не совсем понимаю... Форма добавления состоит из таких полей:
<input type="text" name="title" class="span4" placeholder="заголовок"><br>
                <textarea name="body" rows="3" class="span4" placeholder="запись"></textarea><br>
                <input type="text" name="tags" class="span4" placeholder="тег, еще тег"><br><br>

                <button type="submit" class="btn btn-primary">добавить</button>


Выходит Записывать в хранилище надо как-то вот так?:
var post =$('#zagol').val();
var post +=$('#body').val();
var post +=$('#tags').val();
$('.btn-primary').click(function(){
    var stringified = JSON.stringify(post);
    localStorage.setItem(prefix + post.id, stringified);
});

Хотя как же тогда брать пост id...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
foreach JSON объекта tazododu jQuery 6 01.09.2016 15:21
сортировка объекта JSON kuzroman jQuery 3 29.09.2011 14:46
Вывод переменного по количеству элементов массива из json ArmagedDance Элементы интерфейса 4 08.06.2011 10:45
JSON. Как в callback функции изменить свойство объекта? master_alf jQuery 10 22.04.2010 17:08
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00