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

时间:2015-06-02 04:53:06

标签: javascript meteor spacebars meteor-helper

我有一个脚本,它运行一系列照片文档,检查它们是否与当前用户ID匹配,然后呈现模板。

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

如果用户没有照片,我想显示一个&#34;点击上传照片!&#34;信息。我如何用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>

2 个答案:

答案 0 :(得分:1)

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

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>

答案 1 :(得分:0)

JS

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

模板:

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