01.07.2012, 00:24
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Дык это ж закоммеченный блок, я уже понял что это не решение.
|
|
01.07.2012, 00:29
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Подскажите плз ,как же правильно вывести данные?
|
|
01.07.2012, 01:25
|
sinistral
|
|
Регистрация: 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'шников */ }
|
|
01.07.2012, 02:05
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Хм...не совсем понятна эта строка:
var stringified = JSON.stringify(post);
Как мне быть в моем случае, ведь у меня как видели идет заполнение из JSON файла, содержание которог оя кинул...или мне достаточно попробовать воспользоватся вашим куском кода, отвечающим за вывод?
ЗЫ: попробовал - все равно [object] и андефайнд
Последний раз редактировалось Философ, 01.07.2012 в 02:08.
|
|
01.07.2012, 11:51
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Философ
|
Хм...не совсем понятна эта строка:
var stringified = JSON.stringify(post);
|
переводит объект в JSON:
{
"id": 1,
"title": "Стремящийся наибольший",
"body": "Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.",
"tags": [
"тег", "еще тег"
]
}
// стало
'{"id":1,"title":"Стремящийся наибольший","body":"Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.","tags":["тег","еще тег"]}'
Сообщение от Философ
|
Как мне быть в моем случае, ведь у меня как видели идет заполнение из JSON файла, содержание которог оя кинул...или мне достаточно попробовать воспользоватся вашим куском кода, отвечающим за вывод?
|
следовательно, код из "сохраняем так" записываем в обработчик события завершения запроса, в котором достаем JSON файл.
|
|
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);
});
});
});
|
|
01.07.2012, 12:45
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
неправильно сохраняете. чтобы работало восстановление, нужно сохранять так же, как я написал. эти 2 куска кода взаимосвязаны
|
|
01.07.2012, 12:52
|
Интересующийся
|
|
Регистрация: 21.08.2010
Сообщений: 20
|
|
Хм...попробовал весь Ваш код вместо своего. Работает! Теперь тогда таков вопрос..внизу форму добавления поста..и кнопка удаления.. Как реализовать так, чтобы кнопка удаления удаляла именно свой пост?
|
|
01.07.2012, 13:10
|
sinistral
|
|
Регистрация: 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);
|
|
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...
|
|
|
|