[英]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.