2014-12-04 67 views
0

我有一個包含少量元素(輸入,radioButton等)的模板。如果我想獲得MyTemplate的內這些DOM元素我可以活動如何訪問Template.myTemplate.events,Template.myTemplate.rendered等外部聲明的DOM元素

Template.myForm.events({ 
    'click #submitButton' : function (event, template) { 
     //template variable here gives me access to the 
     //current template instance, so I can get to any 
     //DOM element within this template. 
    } 
}) 

或在

Template.myForm.rendered = function() { 
    //within this function I have access to "this" which points to template instance 
} 

我想知道如果有一種方法來訪問DOM元素,一個聲明中訪問它們在這些事件函數之外的模板中並呈現回調?

在此先感謝

+0

除了呈現回調可以改變的模板實例也可以在創建的(this不可用)中使用'this'並銷燬回調。在助手中,可以使用'Template.instance()',但是在第一次調用助手時,DOM將不可用。這通常應該是訪問模板DOM所需的所有位置。否則,可能有更簡單的方法來解決你試圖做的任何事情。請記住,流星有利於使用JavaScript結構存儲數據,而不是將其存儲在DOM中。 – sbking 2014-12-04 08:55:07

+0

感謝您的洞察力......將數據存儲在Javascript結構中而不是DOM中 – Taimoor 2014-12-04 22:51:26

回答

2

您可以但您需要引用模板實例。

原因是單個模板可以多次使用。在這種情況下,一種簡單易用的訪問模板的方式不會知道它屬於哪個實例。這就是爲什麼你需要使用一個引用,比如下面的例子。

你必須存儲一些實例呈現時:

TheTemplateInstance = null; 

Template.myForm.rendered = function() { 
    TheTemplateInstance = this; 
} 

然後你可以使用TheTemplateInstance任何你想要的,所提供的模板是對DOM。

如果您多次使用myForm,那麼它只能訪問最後創建的那個。

另外你沒有給你的意圖用例。但也有一些更好的方法來辦最多的事與模板:

JQuery的改裝東西時,一些變量的變化(最常見的使用情況下的幫手是沒有用的)

Template.myForm.rendered = function() { 

    var self = this; 

    this.autorun(function() { 
     var xx = something.findOne(); 

     self.$("something").autoform() //Some jquery call    
    }); 

} 

和助手:

Template.myForm.helpers({ 
    someName: function() { 
     return Session.get("name"); 
    } 
}); 

然後,您可以使用您的模板的HTML {{someName}}就是當你使用Session.set("name", "a new value");