Twitter ブートストラップを使用して最初の Web アプリケーションを作成していますが、気に入っていますが、同じことを繰り返すという問題に直面しています。
ナビゲーション バーを作成していますが、URL に基づいてアクティブなタブを UI に反映させたいと考えています。バックボーンを使用して URL をルーティングしています。唯一の問題は、タブが適切な状態を反映するように、URL に基づいて「アクティブ」または「」になるようにさまざまな変数を手動でコーディングする必要があることです。
<template name="navbar">
<div class="container">
<div class="row">
<div class="span6">
<ul class="nav nav-tabs">
<li class="{{home}}">
<a href="/home/">Home</a></li>
<li class="{{1999s10}}{{1965malibu}}{{1960hearse}}{{1966gto}}{{1971blazer}} dropdown">
<a class="dropdown-toggle" data-toggle="dropdown">Cars<b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="{{1999s10}}"><a href="/cars/1999s10">1999 Electric S-10</a></li>
<li class="{{1965malibu}}"><a href="/cars/1965malibu">1965 Malibu</a></li>
<li class="{{1960hearse}}"><a href="/cars/1960hearse">1960 Hearse</a></li>
<li class="{{1966gto}}"><a href="/cars/1966gto">1966 GTO</a></li>
<li class="{{1971blazer}}"><a href="/cars/1971blazer">1971 Bazer</a></li>
<!-- <li class="divider"></li> -->
</ul>
</li>
</div>
</div>
</div>
ご覧のとおり、現在、アクティブなタブを示すための変数がたくさんあります。次のコードの実装を開始しましたが、あまりにも洗練されていないため、停止してより良い方法を使用したいと考えています。
Template.navbar.home = function () {
return Session.equals("active", "home") ? "active" : '';
};
// a bunch more of these for every route
var TodosRouter = Backbone.Router.extend({
routes: {
"home/": "home",
// more routes
},
home: function () {
Session.set("active", "home");
},
// more functions for capturing the routes and setting the session variable "active"
});
Router = new TodosRouter;
Meteor.startup(function () {
Backbone.history.start({pushState: true});
});
この方法を使用する:(1)数字で始まる変数の問題があります(私の悪い)(2)それに応じてセッションの「アクティブな」変数を変更するためにすべてのURLをルーティングする必要があります(3)すべてのテンプレートハンドラーを作成する必要がありますナビゲーション バーのボタン/URL
これを行うためのより良い方法が必要ですが、私はまだそれを見つけていません。
繰り返しますが、DRY (同じことを繰り返さない) プログラミングの原則を破ることなく、必要なタブをアクティブ化する方法を見つけたいと考えています。
編集:
本当にいいのは、次のようなものです。
<li class="{{(url=="/cars/1999s10/")?"active":""}}"><a href="/cars/1999s10">1999 Electric S-10</a></li>
それは最小限のコードになります。