これが私が問題を解決するために思いついたものです。これは、CoffeeScript を使用して行われます。CoffeeScript を使用していない場合は、ここでJavaScript に変換できます。
まず、extendTemplate
関数を定義します。
extendTemplate = (template, mixin) ->
helpers = ({name, method} for name, method of mixin when name isnt "events")
template[obj.name] = obj.method for obj in helpers
if mixin.events?
template.events?.call(template, mixin.events)
template
loginMixin
次に、複数のテンプレートで共有したいヘルパーとイベント (私の場合は ) を含むオブジェクトを宣言します。
loginMixin =
merge_with_email: ->
return Session.get 'account_merge__merge_with_email'
events:
'click button#merge_login': (event, template) ->
email = $(template.find('#email')).val()
password = $(template.find('#password')).val()
Meteor.loginWithPassword email, password, (error)->
if error
console.error "Failed to login."
return false
次に、テンプレートを宣言した後、上記の mixin を使用してテンプレートを拡張できます。register
次のコードを使用して、テンプレートとlogin
テンプレートを拡張しています。
extendTemplate Template.register, loginMixin
extendTemplate Template.login, loginMixin
最後に、これが私のlogin.html
缶がどのように見えるかです:
<template name="login">
<div class="alert">
<a class="close" data-dismiss="alert" href="#">×</a>
<h4 class="alert-heading">Merge accounts</h4>
<form id="register_form" class="form-inline" action="#">
<p class="help-block">Please login with {{merge_with_email}}.</p>
<label for="email">Email:</label>
<input id="email" type="text" class="input-medium" />
<label for="password">Password:</label>
<input id="password" type="password" class="input-medium" />
<button class="btn" id="merge_login">Login</button>
</form>
</div>
</template>
register
テンプレートも拡張したので、ボタンのイベントregister.html
も使用{{merge_with_email}}
して処理することができます。click
merge_login