在 Meteor 中没有文档匹配用户时如何显示占位符文本?

How Do I Display Placeholder Text When No Documents Match User in Meteor?

我有一个脚本可以遍历一组照片文档,检查它们是否与当前用户 ID 匹配,然后呈现模板。

<ul id="settings-photos">
    {{#each photos}}
        {{#if person}}
            {{> photo}}
        {{/if}}
    {{/each}}
</ul>

如果用户没有照片,我想显示 "Click to upload a photo!" 消息。我将如何以 Spacebars/Meteor 的方式为此编写条件?

我的person辅助代码如下

person : function () {
    user = Meteor.userId();
    photoUser = this.user;
    console.log(this);
    if(user == photoUser) {
        return true;
    }
}

编辑:我接受了导致我找到解决方案的答案。我的最终剧本是

photos : function () {
    var id = Meteor.userId();
    var photos = Photos.find({user: id}).fetch();

    return photos;
}

然后在 HTML

<ul id="settings-photos">
    {{#each photos}}
        {{> photo}}
    {{/each}}
    {{#unless photos}}
        Click to upload an image
    {{/unless}}
</ul>

虽然通过照片收集和检查用户进行循环是可行的,但更好的方法是编写一个 UI/Template 帮助程序来提取用户的照片。这样,如果您最终更改了用户模式或照片集,您只需要更改帮助程序。

Template.registerHelper(userPhoto, function(userId){
    var userPhoto = Photos.findOne({person: userId});
    if(userPhoto && userPhoto.photoUrl) {
        return userPhoto.photoUrl;
    }
})

这样你可以更干净地编写你的模板。如

<ul id="settings-photos">
    {{#if userPhoto currentUser._id}}
        {{> userPhoto currentUser._id}}
    {{else}}
        <a href="#">No Photos found. Click here to upload</a>
    {{/if}}
</ul>

原答案:


<ul id="settings-photos">
    {{#each photos}}
        {{#if person}}
            {{> photo}}
        {{/if}}
    {{/each}}
    {{#unless photos}}
        <a href="#">No Photos found. Click here to upload</a>
    {{/unless}}
</ul>

JS

Template.templateName.helpers({
  isPhoto: function(person){
    // your condition
    return true/false;
 }
});

模板:

{{#if isPhoto person}}
 {{> Photo}}
{{else}}
 Click to upload a photo!
{{/if}}