Как получить и отобразить данные из базы данных?

Я пытаюсь получить и отобразить предметы из моей коллекции. Я создал шаблон и придал ему дизайн для каждого элемента. Вот код:

<template name="list_products">

    {{#each applications}}
        <div class="col-sm-4 col-lg-4 col-md-4">
            <div class="thumbnail">
                <img src="http://placehold.it/320x150" alt="">
                    <div class="caption">
                         <h4 class="pull-right">{{price}}</h4>
                         <h4><a href="#">{{title}}</a>
                                    </h4>
                                    <p>{{description}}</p>
                     </div>
            </div>
        </div>
    {{/each}}
</template>

в файле .js я создал приложения, которые будут возвращать все элементы коллекции.

Template.list_products.applications = function(){
    Products.find();
}

затем я вызвал шаблон в файле .html

           {{> list_products}}

Я получил эту ошибку после запуска «npm run start»

Refused to execute script from 'http://localhost:3000/js/jquery.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled

Что я делаю неправильно? здесь отсутствуют какие-либо шаги?


person Behrouz Riahi    schedule 11.03.2016    source источник
comment
Проблема в том, что он ничего не отображает или неверные данные? Если вы откроете консоль, что вам даст Products.find().count()?   -  person David Weldon    schedule 11.03.2016
comment
Я предполагаю, что ваша проблема может быть частью Template.list_products.applications. Попробуйте Template.list_products.helpers.applications = function(){ Products.find(); }. Я предполагаю, что у вас есть автопубликация или вы уже делаете свои публикации.   -  person Oscar Saraza    schedule 11.03.2016
comment
@DavidWeldon у меня 3, количество документов в коллекции   -  person Behrouz Riahi    schedule 11.03.2016
comment
@Oscar хорошо, попробуй сейчас   -  person Behrouz Riahi    schedule 11.03.2016
comment
@Оскар не сработал. У меня нет автопубликации, и я не делал публикацию. я поместил свою коллекцию в каталог /lib, чтобы к ней могли обращаться как клиент, так и сервер. Мне все еще нужно сделать публикацию и подписку?   -  person Behrouz Riahi    schedule 11.03.2016
comment
Вы используете пакет Iron Router   -  person StefanL19    schedule 11.03.2016
comment
@ StefanL19 да, я использую это   -  person Behrouz Riahi    schedule 11.03.2016
comment
Я не понимаю вас в части запуска npm run start. Почему бы вам не запустить свое приложение, используя meteor run?. Можете ли вы опубликовать свою коллекцию и маршруты?   -  person Oscar Saraza    schedule 11.03.2016
comment
@Oscar, потому что я использую package.json в своем проекте метеора, для запуска которого мне нужно использовать npm run scriptName :)   -  person Behrouz Riahi    schedule 11.03.2016


Ответы (1)


Сделайте это с помощью помощника.

    Template.list_products.helpers({
     applications:function(){
      return Products.find({});
      }
    });

Опять же, вы можете перебирать приложения, потому что он вернет курсор. Можно также return Products.find({}).fetch(); Но сначала попробуйте с курсором, чтобы увидеть, работает ли он.

person StefanL19    schedule 11.03.2016
comment
спасибо, это сработало, принял ваш ответ. один вопрос, если вы знаете ответ. Как я могу сделать каждый элемент кликабельным? я хочу, чтобы пользователь перешел на страницу предварительного просмотра элемента, когда он нажмет на нее. :) - person Behrouz Riahi; 11.03.2016
comment
Есть несколько шагов, чтобы сделать его кликабельным. Во-первых, создайте маршрут, который вы хотите использовать для отображения одного сообщения, обычно это: posts/{{_id}}, и продолжайте, выполняя его шаблон. Когда вы визуализируете маршрут, установите переменную сеанса в this.params._id. И таким образом вы сможете вытащить из базы данных одну запись по ее id. Я не мог написать здесь весь код, но следуйте этим шагам и посмотрите несколько примеров. - person StefanL19; 11.03.2016
comment
Мне нравится ТАК, когда я вижу такой вопрос. ты оба - person Billybobbonnet; 11.03.2016