3

私は次のコードを持っています:

Template.leaderboard.players = function() {
    return Players.find({}, {sort: {score: -1, name: 1}});
};

Template.leaderboard.selected_name = function() {
    var player = Players.findOne(Session.get("selected_player"));
    return player && player.name;
};

そして、私はそれをそのようにもっと明確に整理したいと思います:

Template.leaderboard = {
    players: function() {
        return Players.find({}, {sort: {score: -1, name: 1}});
    },
    selected_name: function() {
        var player = Players.findOne(Session.get("selected_player"));
        return player && player.name;
    }
};

問題は(コンソールのエラーから)これがTemplate.leaderboardオブジェクトの既存のすべてのメソッドを上書きし、それを置き換えることです。

上記のような表記法を使用して既存のメソッドを維持しながら、これらのメソッドをオブジェクトに追加する可能性はありますか?

4

3 に答える 3

3

最初の例で行ったように、一度に1つずつ追加するか、jQueryの.extend:などのオブジェクトを別のオブジェクトとマージするメソッドを使用できます。

$.extend(Template.leaderboard, {
    newMethod1: function() {
        ...
    },
    newMethod2: function() {
        ...
    }
});

Template.leaderboard後者の方法を使用する場合は、最初に実際に存在することも確認する必要があります。

var Template = Template || {};
Template.leaderboard = Template.leaderboard || {};

上記のようなコードTemplateは、実際に複数のJSファイルにわたって定義されている場合に一般的であり、ファイルが実際にロードされる順序に関係なく、メソッドを追加し続けることができます。

于 2013-02-02T22:44:00.387 に答える
2

テンプレートヘルパーを探していると思います

Template.leaderboard.helpers({
    players: function() {
        return Players.find({}, {sort: {score: -1, name: 1}});
    },
    selected_name: function() {
        var player = Players.findOne(Session.get("selected_player"));
        return player && player.name;
    }
});
于 2013-02-02T22:48:53.610 に答える
0

jqueryや他のライブラリを使用せずにこれに答える投稿がここにあります。

function merge_options(obj1,obj2){
    var obj3 = {};
    for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
    for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
    return obj3;
}

出典:( 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?

あなたの場合:

var newObject = {};

var tempObject = {
    players: function() {
        return Players.find({}, {sort: {score: -1, name: 1}});
    },
    selected_name: function() {
        var player = Players.findOne(Session.get("selected_player"));
        return player && player.name;
    }
};

for (var attrname in Template.leaderboard) {
    newObject[attrname] = Template.leaderboard[attrname];
}

for (var attrname in tempObject) {
    newObject[attrname] = tempObject[attrname];
}

Template.leaderboard = newObject;
于 2013-02-02T23:01:14.850 に答える