2016-04-26 82 views
1

我使用流星1.3.1,和我做了一些實驗,以獲取在事件監聽器塊的數據上下文,這裏是我的代碼:獲得的流星模板事件處理程序正確數據上下文


 

 
var objs=[ 
 
     { a:"a1", b:"b1", yes:true }, 
 
     { a:"a2", b:"b2" }, 
 
     { a:"a3", b:"b3", yes:true },] 
 

 

 
Template.tt.helpers({ 
 
    objs: objs 
 
}) 
 

 
Template.tt.events({ 
 
    'click .b'(event, template) { 
 
\t console.log(Template.currentData().a); //---> undefined 
 
\t console.log(template.data.a);   //---> undefined 
 
    console.log(Template.parentData(0).a); //---> undefined 
 
\t console.log(this);      //---> Window Obj 
 
    } 
 
})
<template name="tt"> 
 
{{#each objs}} 
 
    <h1>a={{a}}, b={{b}}</h1> 
 
    {{#if yes}} 
 
    <button class="b">b</button>{{yes}} 
 
    {{/if}} 
 
{{/each}} 
 
</template>

我想要得到的a鍵的值,但在幾個方面失敗。

回答

0

此問題的常見模式是創建一個嵌套模板,並附加事件模板將其:

HTML:

<template name="tt"> 
    {{#each objs}} 
    {{> inner}} 
    {{/each}} 
</template> 

<template name="inner"> 
<h1>a={{a}}, b={{b}}</h1> 
{{#if yes}} 
    <button class="b">b</button>{{yes}} 
{{/if}} 
</template> 

JS:

Template.inner.events({ 
    'click .b' (event, template) { 
    console.log(this.a); //will be "a" 
    } 
}) 
+0

非常感謝,它很奇怪,我沒有找到這個解決方法。那麼這是流星的一些有點bug嗎? – Nan

+0

不是一個錯誤。在事件處理程序中,this是模板的數據上下文。如果沒有特定的數據上下文,則上下文就是窗口對象。 –

相關問題