在同一个模板助手对象中调用另一个 属性
Call another property within the same template helpers object
通常我们可以在普通对象中这样做:
var obj = {
a: 2,
b: function() {
return this.a;
}
}
console.log( obj.b() ); // Output '2' in console
所以我们可以在 obj.b.
中得到 obj.a 的值
我正试图在 Meteor Blaze 中实现同样的目标。在模板中:
<template name="mytemplate">
{{b}}
</template>
在后面的代码中:
Template.mytemplate.helpers({
a: 2,
b: function() {
return this.a;
}
}
呈现 'mytemplate' 不会按预期输出“2”。如何从 'b' 函数定义中调用 'a' 方法?
这是因为您的对象没有以任何方式保存。
Template.prototype.helpers = function (dict) {
for (var k in dict)
this.__helpers.set(k, dict[k]);
};
我认为函数也适用于模板数据(使用 this
会引导您找到传递给模板的数据)所以即使您的方法 b
的原始上下文也是 kaboom,因为 this
是动态求值的。使用此结构无法实现您想要实现的行为。
您可以尝试将此方法绑定到它的原始对象 obj.b = b.bind(obj)
但这太可怕了。
此外,Blaze 可能不喜欢处理绑定函数。
要解决此问题,请使用两个不同的对象:一个用于数据,一个用于辅助方法。
var data, methods;
data = { a : 2 };
methods = { b : function() { return data.a; } };
Template.myTemplate.helpers(methods);
在您使用的 API 未明确支持时,以更一般的方式避免依赖 this
... 除非您试图通过 bind
强制使用它。
通常我们可以在普通对象中这样做:
var obj = {
a: 2,
b: function() {
return this.a;
}
}
console.log( obj.b() ); // Output '2' in console
所以我们可以在 obj.b.
中得到 obj.a 的值我正试图在 Meteor Blaze 中实现同样的目标。在模板中:
<template name="mytemplate">
{{b}}
</template>
在后面的代码中:
Template.mytemplate.helpers({
a: 2,
b: function() {
return this.a;
}
}
呈现 'mytemplate' 不会按预期输出“2”。如何从 'b' 函数定义中调用 'a' 方法?
这是因为您的对象没有以任何方式保存。
Template.prototype.helpers = function (dict) {
for (var k in dict)
this.__helpers.set(k, dict[k]);
};
我认为函数也适用于模板数据(使用 this
会引导您找到传递给模板的数据)所以即使您的方法 b
的原始上下文也是 kaboom,因为 this
是动态求值的。使用此结构无法实现您想要实现的行为。
您可以尝试将此方法绑定到它的原始对象 obj.b = b.bind(obj)
但这太可怕了。
此外,Blaze 可能不喜欢处理绑定函数。
要解决此问题,请使用两个不同的对象:一个用于数据,一个用于辅助方法。
var data, methods;
data = { a : 2 };
methods = { b : function() { return data.a; } };
Template.myTemplate.helpers(methods);
在您使用的 API 未明确支持时,以更一般的方式避免依赖 this
... 除非您试图通过 bind
强制使用它。