首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用object notation向对象添加方法

使用object notation向对象添加方法
EN

Stack Overflow用户
提问于 2013-02-03 06:38:30
回答 3查看 99关注 0票数 3

我有以下代码:

代码语言:javascript
复制
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;
};

我想把它组织得更清楚一些:

代码语言:javascript
复制
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对象的所有现有方法并替换它。

有没有可能将这些方法添加到对象中,同时使用上面显示的那种表示法保留现有的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-03 06:48:54

我想你是在找Template helpers

代码语言:javascript
复制
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;
    }
});
票数 2
EN

Stack Overflow用户

发布于 2013-02-03 06:44:00

您可以像在第一个示例中那样逐个添加它们,也可以使用将一个对象与另一个对象合并的方法,例如jQuery的.extend

代码语言:javascript
复制
$.extend(Template.leaderboard, {
    newMethod1: function() {
        ...
    },
    newMethod2: function() {
        ...
    }
});

使用后一种方法,您还需要首先确保Template.leaderboard确实存在!

代码语言:javascript
复制
var Template = Template || {};
Template.leaderboard = Template.leaderboard || {};

如果Template实际上是跨多个JS文件定义的,那么类似上面的代码将是典型的,并且允许您继续添加方法,而不考虑文件实际加载的顺序。

票数 3
EN

Stack Overflow用户

发布于 2013-02-03 07:01:15

这里有一篇文章在不使用jquery或其他库的情况下回答了这个问题。

代码语言:javascript
复制
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;
}

来源:(How can I merge properties of two JavaScript objects dynamically?)。

在您的案例中:

代码语言: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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14667276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档