Лучшие практики JSON: фильтрация узлов на стороне клиента или нет? - PullRequest
0 голосов
/ 02 декабря 2009

В моей базе данных я храню несколько «тем» и «примеров». Каждый пример относится к одной теме.

Я бы хотел показать все темы с именем ASC в компоненте дерева , за исключением одной темы (Тема C) , которую я всегда хочу располагать сверху. Впрочем, это может измениться позже, и я бы не стал менять основной вывод JSON тем и примеров из БД.

1) Представляется ли целесообразным создание клиентской части структуры "неупорядоченный список" (или я должен уже на этапе json_encode () убедиться, что порядок соответствует?) И

2) как бы я в таком случае отфильтровал один конкретный тематический узел по имени и поместил его первым в последовательности?

  • Тема C
    • Пример
    • Пример
  • Тема А
    • Пример
  • Тема B
    • Пример
    • Пример * * 1 032

1 Ответ

0 голосов
/ 02 декабря 2009

На ваши вопросы очень сложно ответить, не зная точно причин, по которым вы это делаете!

В любом случае, пытаясь ответить, 1):

  • Если вы все равно генерируете список в HTML на сервере, и порядок списка не меняется, зачем делать это с JSON & JavaScript? Используйте для этого свою технику на стороне сервера.

  • Если список изменится, и вы хотите, чтобы что-то в пользовательском интерфейсе на клиенте управляло порядком списка, и у вас есть соображения доступности: создайте свой список и свой JSON, используя технику на стороне сервера, закажите обе стороны сервера а затем визуализируйте свой список HTML и передайте свой JSON клиенту. Это сделает список доступным для клиента (пользователя) без включенного JavaScript, а «сортируемый список» - для клиентов с включенным JavaScript.

  • Если у вас нет проблем с пользователями без JavaScript, и список необходимо переупорядочить, просто передайте свои данные JSON своему клиенту и используйте JavaScript для их визуализации и обработки переупорядочения.

2) Я предполагаю, что каждый из ваших объектов, которые вы хотите отсортировать, находится в массиве? Если это так, я бы использовал метод Array.sort: www.w3schools.com / jsref / jsref_sort.asp

Что-то вроде следующего должно дать вам представление о том, как это сделать:

       var data = [{
    "Topic" : "C",
    "Examples":[
     {"Example" : "Example A one"},
     {"Example" : "Example A two"},
    ] 
   },{
    "Topic" : "B",
    "Examples":[
     {"Example" : "Example B one"},
     {"Example" : "Example  B two"},
    ] 
   },{
    "Topic" : "A",
    "Examples":[
     {"Example" : "Example C one"},
     {"Example" : "Example C two"},
    ] 
   }];

   function sortTopics(topics, firstItem){
    var sortedArray = []; 

    for (var i = 0; i < topics.length; i++) {
     if (topics[i].Topic == firstItem) {
      //add the specified first item
      sortedArray.push(topics[i]);
      //remove element from original
      topics.splice(i,1);
break;
     }

    }

    //sort the remainder of the array
    topics.sort(function(a,b){
     if(a.Topic < b.Topic){return -1;}
     if(a.Topic > b.Topic){return 1;}
     return 0;
    });

    //loop though and add each item to the new array          
    for (var i = 0; i < topics.length; i++) {
     sortedArray.push(topics[i]);
    }

    return sortedArray;
   }

   sortTopics(data, "C");

Я не уверен, насколько кроссбраузерным он будет, и, очевидно, вам нужно будет сгенерировать список из JSON, но он должен дать вам место для начала, вы, конечно, можете сделать его более универсальным и эффективным!

Удачи.

...