[英]Meteor.js scope issues
我的大部分编码都在[appname].js
的根目录中进行,而一些第三方库则在app / client / compatibility中进行
我能够加载这些库,并在我的Template.template1.rendered
处理程序中从它们声明和实例化对象,效果很好。
但是,当我要修改Template.template2.events
中的变量之一时,尤其是更改选择器时的事件。 当我尝试从此处更改它时,它告诉我我的变量未定义。
我尝试在isClient
中的文件顶部声明变量,但这似乎无关紧要。 没有在此定义的方案。
所以我的问题是如何在Template.template2.events
修改此变量?
var something;
if ( Meteor.isClient ) {
function doSomething(some, value) {
some.property = value;
}
Template.template1.rendered = function() {
if(!this._rendered) {
this._rendered = true;
this.something= thirdParty.Create();
doSomething(this.something, document.getElementById("text").value);
}
}
Template.template2.events({
"change select" : function( event ) {
doSomething(this.something, input );
}
});
的something
在doSomething
从我的调用时函数说未定义的change select
事件。
我不认为这个问题是范围而是背景。 在您rendered
函数中(您现在应该使用onRendered()
回调), this
值设置为正在呈现的模板实例: http : //docs.meteor.com/#/full/template_onRendered
在另一方面,在你的模板事件(和佣工),值this
设置为数据上下文- 没有模板对象。 但是,您可以访问模板实例,因为它是作为事件映射函数的第二个参数传递的: http : //docs.meteor.com/#/full/eventmaps
尚不清楚您想要在代码中使用什么范围。 但是,您当前的代码包括:
var imageViewer;
以上内容在本地文件范围内声明(但可以关闭)
Template.ocr_results.rendered = function() {
this.imageViewer = thirdParty.Create();
}
上面的内容声明为刚刚渲染的模板实例(ocr_results的实例)的属性。
Template.ocr_form.events({
"change select" : function( event ) {
changeImage(this.imageViewer, input );
}
});
上面对this.imageViewer
引用未定义有两个原因。 首先, this
是数据上下文,而不是模板实例。 其次,即使您编写了以下代码来使用模板实例,它也将引用ocr_form
模板实例,而不是ocr_results
模板实例(这是您在上面的第二个代码块中定义的位置)。
Template.ocr_form.events({
"change select" : function(event, template) {
changeImage(template.imageViewer, input );
}
});
上面仍然是不确定的。
正如@Curtis所建议的,您可能应该同时删除这两个 this.
前缀使您的代码正常工作,但是仅创建和使用一次(封闭的)变量可能不是您想要的-因此,冗长的解释!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.