Meteor中的重复代码

Dig*_*ord 4 javascript meteor

我一直在研究Meteor中的一个小应用程序.我注意到一种代码模式开始让我感到烦恼.

Template.userForm.helpers({
    name: function(){
        user = Meteor.users.findOne(Session.get('edit-user'));
        return user && user.profile.name;
    },

    _user_id: function(){
        user = Meteor.users.findOne(Session.get('edit-user'));
        return user && user._id;
    },
    email: function(){
        user = Meteor.users.findOne(Session.get('edit-user'));
        return user && user.emails && user.emails[0].address;
    },

});
Run Code Online (Sandbox Code Playgroud)

问题是variable && variable.attribute重复看到代码.如果我不编写代码,我会得到有关未定义变量的错误.

有一个更好的方法吗?我错过了什么?

Hub*_* OG 6

return variable && variable.attribute等同于更复杂

if(variable) return variable.attrubite;

return false;
Run Code Online (Sandbox Code Playgroud)

这是必要的,因为如果variablenull- 在页面加载和收集通胀之间一直发生 - 调用variable.attribute引发异常:null没有属性.

所以不,那张支票没有逃脱.如果这个困扰你,你可以选择另一种味道 - 就我个人而言,我将离开最后一行的实际回报并提前检查正确性:

if(! variable) return null;

return variable.attribute;
Run Code Online (Sandbox Code Playgroud)

可以避免的是这条线 - 所有助手也会重复这一点:

user = Meteor.users.findOne(Session.get('edit-user'));
Run Code Online (Sandbox Code Playgroud)

 


 

但是,在上述情况下,所有属性都属于单个对象.那么为什么不通过这个单一的对象呢?

userForm.js:

Template.userForm.user = function() {
    return Meteor.users.findOne(Session.get('edit-user'));
}
Run Code Online (Sandbox Code Playgroud)

userForm.html:

<template name="userForm">
    <span data-id="{{user._id}}">
        Name: {{user.name}}, email: {{user.email}}
    </span>
</template>
Run Code Online (Sandbox Code Playgroud)

甚至:

<template name="userForm">
    {{#with user}}
        <span data-id="{{_id}}">
            Name: {{name}}, email: {{email}}
        </span>
    {{/with}}
</template>
Run Code Online (Sandbox Code Playgroud)