Я пытаюсь использовать 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>
благодаря
В угловом вы привязываете результат к $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>
Функция возвращает объект автора, конечно, вы получаете доступ к имени.
Здесь Метеор Пад