2014-10-03 58 views
1

我有一個通用模板,我多次使用。流星類從JQuery.click()發射多次()

{{#each item}} 
    {{> genericTemplate}} 
{{/each}} 

在這個模板裏面我有一個按鈕,當它被點擊時觸發通用模板中的隱藏文件輸入。

$(".upload").click(); 

不幸的是,對於每個模板「.upload」類被激發。所以如果我有四個items,它會給我4個文件輸入。我不能給這些按鈕一個獨特的id="",因爲那樣我就不得不爲每個id明確地定義每個事件,否則首先要創建通用模板的全部理由。什麼是適當的方式來實現這樣的事情?

編輯:

我的模板事件是這樣的:

Template.generic.events({ 
    'click .fileUpload' : function() { 
    $(".upload").click(); // sets off the 4 templates .upload class 
    }, 
    'change .upload' : function (e) { 
    console.log('upload') 
    } 
}) 

HTML:

<template name="generic"> 
    <!--Hidden Inputs that get fired on click events --> 
    <div class="hiddenFile"> 
     <input type="file" class="upload"/> 
    </div> 

    <button class="btn btn-success fileUpload">UPLOAD FILE </button> 
</template> 

回答

1

試試這招:

Template.generic.events({ 
    'click .fileUpload' : function (event,template) { 
    // fires only the template instance .upload 
    template.$(".upload").click(); 
    }, 
    'change .upload' : function (e) { 
    console.log('upload') 
    } 
}); 
+0

請參閱編輯。我瞭解定義事件。如果我對這個問題不清楚,請告訴我。 – Nate 2014-10-03 13:58:04

+0

你能否提供HTML代碼? – saimeunt 2014-10-03 14:02:25

+0

編輯我的答案,我認爲這應該做的伎倆。 – saimeunt 2014-10-03 14:06:25

1

您可以使用Template.instance火日僅在適當的情況下E事件:

'click .fileUpload' : function() { 
    var template = Template.instance(); 
    template.$(".upload").click(); // should only set off this specific upload input. 
} 

這就是說,真的沒有辦法可以實現無需在DOM製造事件同樣的效果?這取決於你,但是你不能直接運行直接代替console.log('upload')的代碼嗎?

+0

該模板實例是我所缺少的。這是不好的做法嗎? – Nate 2014-10-03 14:16:46

1

也許這樣嗎?

Template.generic.events({ 
    'click .fileUpload' : function (event, target) { 
     e.currentTarget.parent().find(".upload").click(); // sets off the 4 templates .upload class 
    }, 
    'change .upload' : function (e) { 
     console.log('upload') 
    } 
})