Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor.js范围问题_Javascript_Templates_Meteor_Scope - Fatal编程技术网

Javascript Meteor.js范围问题

Javascript Meteor.js范围问题,javascript,templates,meteor,scope,Javascript,Templates,Meteor,Scope,我在根目录下的[appname].js中编写了大部分代码,在app/client/compatibility中编写了一些第三方库 我能够加载这些库,并在Template.template1.rendered处理程序中声明和实例化其中的对象,这非常有效 但是,当我想修改Template.template2.events中的一个变量时,特别是更改选择器时的事件。当我试图从这里改变它时,它告诉我我的变量是未定义的 我曾尝试在isClient中的文件顶部声明变量,但这似乎并不重要。这里没有定义它的场景

我在根目录下的[appname].js中编写了大部分代码,在app/client/compatibility中编写了一些第三方库

我能够加载这些库,并在Template.template1.rendered处理程序中声明和实例化其中的对象,这非常有效

但是,当我想修改Template.template2.events中的一个变量时,特别是更改选择器时的事件。当我试图从这里改变它时,它告诉我我的变量是未定义的

我曾尝试在isClient中的文件顶部声明变量,但这似乎并不重要。这里没有定义它的场景

所以我的问题是如何在Template.template2.events中修改这个变量

var某物; 如果Meteor.isClient{ 函数doSomethingsome,值{ 财产=价值; } Template.template1.rendered=函数{ 如果!这个{ 这是真的; this.something=thirdParty.Create; doSomethingthis.something,document.getElementByIdtext.value; } } Template.template2.events{ 更改选择:函数事件{ dosomething这个东西,输入; } };
从我的更改选择事件调用doSomething函数时,doSomething函数中的something表示未定义。

我认为问题不在于作用域,而在于上下文。在呈现函数中,您现在应该使用onRendered回调,该回调的值设置为正在呈现的模板实例:

另一方面,在模板事件和帮助程序中,此值设置为数据上下文,而不是模板对象。但是,您可以访问模板实例,因为它将作为第二个参数传递给事件映射函数:

还不完全清楚您希望在代码中包含什么范围。但是,您当前的代码包括:

var imageViewer;
上述内容在本地文件作用域中声明,但可以关闭

Template.ocr_results.rendered = function() {
  this.imageViewer = thirdParty.Create();
}
上面声明为刚刚呈现ocr_结果实例的模板实例的属性

Template.ocr_form.events({
  "change select" : function( event ) {
    changeImage(this.imageViewer, input );
  }
});
以上对this.imageViewer的引用未定义有两个原因。第一,这是数据上下文,而不是模板实例。第二,即使您编写了以下代码来使用模板实例,它也将引用ocr_表单模板实例,而不是ocr_结果模板实例,您已在第二块中对其进行了定义上面的代码

Template.ocr_form.events({
  "change select" : function(event, template) {
    changeImage(template.imageViewer, input );
  }
});
上述内容仍不明确


正如@Curtis所建议的,您可能应该删除this.prefixes以使代码正常工作,但创建和使用closed-over变量一次可能不是您想要的-因此需要进行冗长的解释!

为了澄清,我在文件顶部声明变量:var something;if Meteor.isClient{Template.template1.rendered=函数{something=thirdparty.create;}}但是我无法修改模板中的某些内容。事件需要一些代码示例重复我看到了,我试过了。如果没有这个,尝试访问变量似乎不起作用。所以只需更改ImageImageViewer,input;作为一个示例,很好,实际上帮助很大!我能够在ocr表单模板中初始化它,然后使用事件中的template.imageViewer。谢谢!