簡體   English   中英

Meteor.js范圍問題

[英]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 );
    }
  });

somethingdoSomething從我的調用時函數說未定義的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM