簡體   English   中英

如何從Meteor中的動態模板調用方法

[英]How to call a method from a dynamic template in Meteor

我正在Meteor中建立一個設置頁面,其中將包含用於許多設置類別的動態模板。

我想做的是在類別模板中有一個方法,當我單擊父模板上的“提交”按鈕時,該方法將被調用。

settings.html

<div>
  {{> Template.dynamic template=settings}}
  <div class="submit">
    <button>Save Changes</button>
  </div>
</div>

settings.coffee

Template.settings.events
    'click .submit button': ->
        dynamiclyLoadedTemplate.save()

my-dynamic-template.coffee

Template.dynamicTemplate.onCreated ->
    @save = ->
        # doSomething()

my-other-dynamic-template.coffee

Template.otherDynamicTemplate.onCreated ->
    @save = ->
        # doSomethingElse()

這可能嗎?

我應該將這些方法創建為窗口方法,而不是模板方法嗎?

您可以在子模板中添加以下代碼:

Template.childTemplate.onCreated ->

    settingsTemplate = this.parentTemplate(...) # ... = number of upstream levels
    settingsTemplate.child ?= []
    settingsTemplate.child.push this

    @save = ->
        console.log 'Save called'

因此,您可以在父模板上調用以下代碼:

Template.parentTemplate.events

    'click .submit button': ->
        console.log 'submit button clicked'

        instance = Template.instance()

        if instance.child?.length > 0
            for child in instance.child
                child.save?()

我有一個類似的模式,我只是將事件附加到父模板(加載動態模板的事件)。 數據上下文將是父級的,但仍比將方法附加到窗口對象更好,因為在我的情況下,子模板無論如何都處理相同類型的對象。

在您的情況下,首先將動態模板的父模板本身作為模板:

<template name="parent">
  <div>
    {{> Template.dynamic template=settings}}
    <div class="submit">
      <button>Save Changes</button>
    </div>
  </div>
</template>

然后只需將事件附加到該父對象:

Template.parent.events
    'click .submit button': ->
        save() // generic save function you've defined, for example in this file

當動態包含的模板具有相同類型的對象並且通常具有相似的DOM元素(至少是要將事件附加到的元素)時,此方法會很好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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