Метеор: Как мне заставить dburles: помощники по сбору работать с Angular?

0

Я пытаюсь использовать urigo:angular with dburles:collection-helpers но я не могу понять, какой синтаксис должен быть.

Это то, что я использовал только Метеор:

Template.books.helpers({  
    books: function() {
        return Books.find();
    },
    authors: function() {
        return Authors.find();
    },
    author: function() {
        return Authors.findOne(this.authorId);
    }
});

И в перспективе:

<template name="books">  
    <h1>Books!</h1>
    <ol>
        {{#each books}}
            <li>{{name}} by {{author.name}}</li>
        {{/each}}
    </ol>
</template>

Это сработало хорошо.

Теперь я добавил Angular, и я перехожу к этому (автор не работает):

$scope.books = $meteor.collection(function(){
    return Books.find({})
});

$scope.authors = $meteor.collection(function(){
    return Authors.find({})
});

$scope.author = $meteor.collection(function(){
    return Authors.findOne(this.authorId);
});

И взгляд на это:

<li ng-repeat="book in books">{{book.name}} by {{author.name}}</li>

благодаря

Теги:
join
meteor
angular-meteor

1 ответ

2
Лучший ответ

В угловом вы привязываете результат к $scope.author а не к самой функции. Когда вы звоните

$scope.author = $meteor.collection(function() {
    return Authors.findOne(this.authorId);
}

this относится к контроллеру (на самом деле я думаю, что он ссылается на метод сбора... в любом случае), а не на книгу. Кроме того, у углового метеор нет метода findOne, вы просто добавляете {limit: 1} или используете $meteor.object

Чтобы получить аналогичный результат с тем, что вы делаете, в вашем контроллере вы можете сделать что-то вроде:

function MainController($scope, $meteor) {
    $scope.books = $meteor.collection(function () {
        return Books.find({});
    });

    $scope.authors = $meteor.collection(function () {
        return Authors.find({});
    });

    $scope.author = function (book) {
       return $meteor.object(Authors, book.authorId, false);
    }
}

$meteor.object - это то, что вы будете использовать вместо findOne. Теперь в html вам нужно вызвать функцию:

<li ng-repeat="book in books">{{book.name}} by: {{author(this.book).name}}</li>

Функция возвращает объект автора, конечно, вы получаете доступ к имени.

Здесь Метеор Пад

  • 0
    Спасибо, это работало нормально. Если я хочу отобразить все комментарии, где bookId равен id этой книги? Я безуспешно попробовал следующее: $ scope.comments = function (book) {return $ meteor.object (Comments, {bookId: book._id ()}, false); }
  • 0
    комментарии будут коллекцией, а не объектом.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню