4

私は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;
    },

});

問題は、variable && variable.attributeコードが繰り返されていることです。そのようにコードを書かないと、未定義の変数に関するエラーが発生します。

これを行うより良い方法はありますか?私は何が欠けていますか?

4

2 に答える 2

3

特にSession変数を使用する場合は、グローバル ヘルパーを定義することをお勧めします。これにより、より柔軟になり、複数のテンプレートで使用できるようになります。

Handlebars.registerHelper("getUserProperty", function(field) {
    var user = Meteor.users.findOne(Session.get('edit-user'));
    return user && user[field];
});

{{getUserProperty "username"}}次に、これをまたはそのようなもので使用できます。field引数をもう少し凝ったものにすることもできるので"profile.name"、オブジェクトに繰り返しインデックスを付けるようなものを使用できます。次のようなものですが、より多くの解析ロジックを確実にサポートできます。

Handlebars.registerHelper("getUserProperty", function(field) {
    var item = Meteor.users.findOne(Session.get('edit-user'));

    var keys = field.split(".");

    $(keys).each( function(idx, value) {
        item = item && item[value];
    });

    return item;
});

1 つの注意点:varローカル変数を宣言するときは、おそらくもっと使用する必要があります。Coffeescript で行う必要はありませんが、Javascript では非常に重要です。

于 2013-07-10T16:14:48.460 に答える