現在、meteorセッションと、コードがテンプレートをレンダリングするためにどのようにトリガーするかについて問題があります。現在、._idをクリックされたものに設定するセッションがあります。
Template.sidebar.events({
/* on click of current sidecat class change to sidecat selected */
'click .sidecat': function (event) {
Session.set("selected_project", this._id);
}
});
そして、selected_playerがdivと等しい場合は、cssクラスを追加します。
Template.sidebar.sidebarselected = function () {
return Session.equals("selected_project", this._id) ? "sidebarselected" : '';
}
サイドバーが選択されていて、別のクラスが存在する場合に、テンプレートをレンダリングします。アイテムをクリックすると、テンプレートがレンダリングされます。
Template.sidebar.projectselected = function() {
var find = Session.get("selected_project");
var find2 = ($("#"+find).attr('class'));
/* if exists return true render the template */
if (find2 == 'project sidebarselected')
{
return true
}
/* else don't render it return null */
else {
return null
}
};
これまでのすべてがうまく機能します。これで、リストに新しいアイテムを作成し、それを選択したアイテムにするボタンができました。トラブルが発生したときです。新しいアイテムを作成すると、リストアイテムがレンダリングされ、クラスサイドバーが選択されますが、呼び出されるテンプレートがレンダリングされません。アイテムをクリックすると、テンプレートがレンダリングされます。ただし、ボタンを使用して新しいリストアイテムを作成する場合は除きます。選択されますが、テンプレートはレンダリングされません。これがそのためのコードです。
Template.sidebar.events({
/* add bar settings menu functions for clicks */
'click #newProject': function(event){
var create = NewProject();
Session.set("selected_project", create);
},
これはNewProject関数です
/* add a new project to the side bar */
function NewProject() {
id = Aprojects.insert({
name: "New Project",
type: "project"
});
doc = Aprojects.findOne({_id:id});
return doc._id;
}
OK、すべてあります。ボタンをクリックするとアイテムが作成され、クラスは追加されますが、テンプレートはレンダリングされません。これがすべてのjavascriptです。htmlが必要な場合はお知らせください。提供します。
詳細とhtmlテンプレートのものを追加しましょう。しかしとにかく、何が機能するのか
- リストからプロジェクトを選択できます
- プロジェクトを(クリックして)選択すると、選択されたことを示すクラス名が付けられます
- 「新しいプロジェクト」をクリックすると、リストにアイテムを追加してすぐに選択します
それはすべて正しく機能します。問題は、新しいプロジェクトボタンをクリックするときです。それでも、新しく作成されたプロジェクトが適切に選択され、選択されたクラスが与えられます。選択されたbarクラスにもプロジェクトのクラスがあることがわかった場合は発生しません。別のテンプレート(projectpicked)をレンダリングします。Projectpickedは、アイテムがクリックされたときに表示されます。#newprojectがクリックされたときではありません。選択されたとしても、projectpickedテンプレートは表示されません。コードがもっと話をすることができるかどうか見てみましょう。
<body>
{{> sidebar}}
</body>
<template name="sidebar">
{{#if aproject}}
{{#each aproject}}
<div class="sidecat {{sidebarselected}} project" id="{{divids}}">
{{name}}
</div>
{{/each}}
{{/if}}
{{#if projectselected}}
{{> projectpicked}}
{{/if}}
</template>
<template name="projectpicked">
project was picked from sidebar
</template>
アプリケーションロジックとDOM構造の組み合わせの背後にある理由は、カテゴリのようなプロジェクト以外にも他のものがあるということです。セッションを使用してIDを取得し、それがプロジェクトまたはカテゴリのようなクラスであるかを判断し、それがどのクラスであるかに基づいて異なるテンプレートを表示することを考えました。それが最善の方法かどうかはわかりませんが、それが私が思いついた方法です。提案を受け入れます。不明な点がある場合は、私にはわかりません。説明しようと思います。助けてくれてありがとう。