使用对象表示法向对象添加方法
Add methods to an object with object notation
我有以下代码:
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
对象的所有现有方法并替换它。
添加到对象中,同时使用上面显示的表示法保留现有方法?
您可以像
在第一个示例中那样一次添加一个对象,也可以使用将一个对象与另一个对象合并的方法,例如 jQuery 的.extend
:
$.extend(Template.leaderboard, {
newMethod1: function() {
...
},
newMethod2: function() {
...
}
});
使用后一种方法,您还需要首先确保Template.leaderboard
确实存在!
var Template = Template || {};
Template.leaderboard = Template.leaderboard || {};
如果Template
实际上是跨多个 JS 文件定义的,则上述代码将是典型的,并且允许您继续添加方法,而不考虑文件实际加载的顺序。
我想你正在寻找模板助手
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;
}
});
这里有一篇文章在不使用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;
}
源:(如何动态合并两个 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;
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Meteor-将选定窗体中的对象添加到集合中
- 在play2框架中向json对象添加下拉列表项
- 如何在javascript上向数组的对象添加新元素
- JSON到对象数组,并向每个对象添加项
- 如何将一个对象添加到每个对象数组中
- 向Angular作用域对象添加对象数组——TypeError
- CoffeeScript将对象添加到数组中
- 如何从Addon SDK向选项卡对象添加进度侦听器
- 使用ja将对象添加到HTML画布中
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 将新对象添加到本地存储
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 使用游标循环将JS对象添加到数组中
- 向调用全局javascript函数的对象添加处理程序
- 将另一个文件中的对象添加到单独文件中的阵列中
- 将对象添加到数组中
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- sequelize为找到的对象添加值
- 向对象添加新方法和值,同时避免重复