2014-12-10 3 views
1

Это мой первый раз с дербиями, не знаю, являюсь ли я глупым или это недостаток документации. У меня есть модель под названием «книги», и я просто пытаюсь показать список книг.не удалось отобразить список документов в представлении, используя derbyjs

вот мой код:

module.exports = { 
    properties: { 
     title: {type: 'string', minLength: 6}, 
     author: {type: 'integer', minimum: 0}, 
     image: {type: 'string'}, 
     status: {type: 'integer', minimum: 0, maximum: 1}, // 1 read, 0 wants to read 
     comment: {type: 'string'} 
    }, 
    required: ['title'] 
} 

и список схем

module.exports = { 
    schemas: { 
     auths: require('./model/auths'), 
     products: require('./model/products'), 
     books: require('./model/books') 
    } 
} 

индекс JS

app.get('/shelf', function(page, model, params, next){ 
    model.subscribe('books', function(){ 
     var book = model.at('books.669374b5-8470-4f3a-a25f-0995a5a92a7a'); 
     model.ref('_page.book', book); 
     page.render('home'); 
    }); 
}); 

я рассчитывать на "книги" в представлении, поэтому я написал {{каждый}} следующим образом

{{ each books as #b}} 
    {{ #b.title }} 
{{/each}} 

, но ничего не отображается, хотя это работает отлично и делают, как и ожидалось

{{ _page.book.title }} 

также на веб-консоли, это работает отлично, и показывает 3 книги

app.model.get('books') 

уведомление: я добавил книги через веб-консоль, что-то вроде этого

app.model.add('books', {title: 'something'}) 

внутри функции подписываться, я попытался

var books = model.get('books'); 
model.ref('_page.books', books); 

но подняться ошибка вверх

идея, что я делаю не так? мне очень нравятся derbyjs, но это удерживает меня в течение нескольких дней.

ответ

2

Если вы хотите, чтобы страница была обновлена ​​автоматически, вы должны использовать вместо get(), например.

app.get('/shelf', function(page, model, params, next) { 
    var booksQuery = model.query('books', {}); 
    model.subscribe(booksQuery, function(err) { 
    booksQuery.ref('_page.books'); 
    page.render('books'); 
    }); 
}); 

Шаблон:

{{ each _page.books as #b}} 
    {{ #b.title }} 
{{/each} 

В дополнение к официальным Дерби документы я нашел derby-faq быть хорошим ресурсом.

+0

Вы только что сделали свой день, спасибо :) – emostafa

+1

Чтобы объяснить это немного больше, 'books' - это коллекция, а коллекции представлены как объекты в модели. В шаблонах Derby блоки '{{each}}' могут только перебирать массивы и * не * над объектами. Как отметил Кайл, вы можете использовать refList для создания массива документов в коллекции, соответствующей результатам запроса. Кроме того, вы можете использовать model.filter для сопоставления коллекции в массив. –

+0

что бы я хотел спросить, мне всегда нужно использовать подписку, прежде чем я буду использовать model.get()? потому что первый метод ответа не работал для меня, но второй работает отлично. – emostafa