Отображение всех или выбранных свойств объекта с помощью Meteor & Handlebars

Я пытаюсь сделать приложение для работы с помощью метеора. Я могу извлекать данные из БД и отображать их в шаблоне. Но для этого я сейчас получаю каждое свойство в шаблоне. Был ли способ, которым я могу отобразить все или некоторые свойства сразу.

Template.postSubmit.events({
    'click #submit': function(event){
        var job = {};
        job.jobtype = $('input[name ="jobtype"]:checked').val();
        job.category = $('input[name="category"]:checked').val();
        job.location = $('input[name="location"]').val();
        job.relocationAssistanceAvailable = $('input[name="relocationAssistanceAvailable"]')[0].checked;
        job.description = $('#jobDescription').val();
        }
});

//****Return data***//
Template.postDisplay.posts = function(){
    return Jobs.find();
}

//**My template where I am retriving data**//
<template name="postDisplay">
    <div class="container">
        {{#each posts}}
            <li>{{location}}</li>
            <li>{{jobtype}}</li>
            <li>{{category}}</li>
            <li>.......</li>
        {{/each}}
    </div>
</template>   

МОЖЕТ КТО-ТО ПОМОЧЬ МНЕ ОТОБРАЗИТЬ ВСЕ ЭТИ ПРЕДМЕТЫ В КОЛЛЕКЦИИ, БЕЗ ПОЛУЧЕНИЯ КАЖДОГО, КАК ВЫШЕ. ЗАРАНЕЕ СПАСИБО....!!!!


person girishkumar    schedule 25.02.2014    source источник


Ответы (2)


Если вы специально не объявляете каждое свойство документа и где/как оно будет отображаться в html, как вы собираетесь их размещать и стилизовать? Например, что, если вы хотите отобразить каждое свойство в отдельной строке, абзаце или элементе списка, как вы это делаете?

При этом единственный способ получить полные свойства — это представление JSON, которое описано на странице http://docs.meteor.com/#ejson_stringify

Template.postDisplay.posts = function(){
  return _.each(Jobs.find().fetch(), function(postDocument) {
    return EJSON.stringify(postDocument);
  });
}

<template name="postDisplay">
  <div class="container">
    {{#each posts}}
      {{.}}<br/>
    {{/each}}
  </div>
</template>  

EJSON также имеет опцию разделителя, которую вы можете взломать, чтобы фактически имитировать элемент li.

Template.postDisplay.posts = function(){
  return _.each(Jobs.find().fetch(), function(postDocument) {
    return EJSON.stringify(postDocument, {'string': '</li><li>'});
  });
}

<template name="postDisplay">
  <div class="container">
    {{#each posts}}
      <li>{{.}}</li>
    {{/each}}
  </div>
</template>  

Примечание: вы распечатываете <li> элементов, но не заключаете их в <ul>, в результате чего они отображаются как единый список. на самом деле каждая вакансия представляет собой отдельный список.

person Serkan Durusoy    schedule 25.02.2014
comment
О, возможно, вы также можете создать собственный помощник руля, как описано здесь github.com/meteor/meteor/ wiki/Handlebars и перебрать ключи с помощью подчеркивания, а затем поместить его в документ в виде блока. Это будет сложнее, чем ваш исходный код, но если вы определенно настаиваете, я могу попытаться привести пример. - person Serkan Durusoy; 26.02.2014

Handlebars могут легко перебирать массивы, как вы, вероятно, видели с помощником {{each}}.

Что вы хотите, так это перебирать ключи объекта. Для этого вам нужно зарегистрировать помощник Handlebars.

В любом случае, рано или поздно вам захочется отображать некоторые поля определенным образом, даже если сейчас они все выглядят как строки. Например, вы можете связать местоположение с URL-адресом Google Maps или категорию со страницей в вашем приложении со списком всех вакансий в этой категории.

Вот почему итерация по ключам объекта не так распространена, и я бы посоветовал включить каждое поле в <li> и продолжить работу с вашим приложением.

PS: "НЕ НУЖНО КРИЧАТЬ....!!!!" :)

person Dan Dascalescu    schedule 26.02.2014