私は共通のロジックを持つデスクトップとモバイルサイズの2つの別々のhtmlテンプレートを持っています。これらのhtmlテンプレートを1つのjsテンプレートとバインドする可能性はありますか?meteor.jsに1つのjsテンプレートで2つのhtmlビューをバインドします
1
A
答えて
1
私が見つけた最も簡単な方法は、dynamic templateを使用してモバイルテンプレートまたはデスクトップテンプレートを選択し、jsを親テンプレート(ダイナミックテンプレートを埋め込むテンプレート)に添付することです。
0
メディアクエリを使用してこれを行うことができます。これは、レンダリングされるHTMLが変化するブレークポイント(すなわち、画面サイズ)を指定することを可能にします。これにより、デスクトップユーザーはウィンドウのサイズを変更するだけでモバイルビューを表示できます。私の場合の解決策では
+0
明確ですが、メディアクエリのみを使用することはできません。まず第一に私はすでに2つの別々のhtmlレイアウトを持っていて、すべてのビューのセコンはモーダルウィンドウともう1つのノーマルページです –
1
はミシェル・フロイド、私をadviced、およびヘルパーはちょうど両方のテンプレートへのDataContextに渡されたように、私はテンプレートを切り替えるためにブレイズを使用 次でした。
<template name="signUpTutor">
{{#if equals view 'mobile'}}
{{> Template.dynamic template="signUpTutorMobile" data=dataContext}}
{{else}}
{{> Template.dynamic template="signUpTutorDesktop" data=dataContext}}
{{/if}}
以下JSテンプレートの私の一般的なHTMLページ・ビューと一部
Template.signUpTutor.helpers({
'equals': function (a, b) {
return a == b;
},
'dataContext': function() {
var dataContext = {}
dataContext.subjects = Subjects.find();
dataContext.ageOptions = function() {
var ageOptions = [];
for (var i = 0, a = 19; a <= 99; i++, a++) {
ageOptions[i] = a;
}
return ageOptions;
};
dataContext.experienceOptions = function() {
var experienceOptions = [];
for (var i = 0, a = 1; a <= 60; i++, a++) {
experienceOptions[i] = a;
}
return experienceOptions;
};
return dataContext;
}
})。
ありがとう、それは解決策になる可能性があります。それは本当に最も簡単な方法ですか?ビューを持つロジックをバインドするための法的APIはありませんか? –
ブレーズを使ってレイアウトを切り替えるのは簡単ですが、{{ifMobile}} {{> mobileTemplate}} {{else}} {{> desktopTemplate}} 'ですが、各テンプレートには独自のヘルパーが必要です。ダイナミックテンプレートは、(グローバルヘルパーのほかに)テンプレート全体でjsを再利用するための唯一の回避策です。 –