0

恐ろしいタイトルで申し訳ありませんが、基本的に私がやっていることは、プラスボタンが押されたときにバックボーンビューを生成するテンプレートを持っていることです. これは、いくつかのテキスト入力とドロップダウンを選択する非常に単純なフォームです。重複している領域を強調表示して、フォームを検証したいと考えています。現在、私のアンダースコアテンプレートには、

<div id="#index1-<%=dataId%>">

したがって、dataId プロパティを持つ私のモデルは ID を一意にします。次に、属性で選択して、その div を赤で強調表示できます。何かで始まる ID を選択する方法を検索しているときに、次の投稿に出くわしました: jquery how to select all the class elements start with "text-"?

著者は、代わりにクラスを使用する方法について話します。検証時に行っていることは、errorものを赤で強調するためにスタイルのクラスを追加することです。したがって、プラス ボタンで追加されたページ上のすべての子ビューを反復処理すると、次のようになります。

       var lastIndex1;
       _.each(this.childViews, function (childView) {
            var dataId = childView.model.get('dataId');

            var index1 = childView.$('#index1-' + dataId).val();
            if (lastIndex1 == index1) {
                $('#index1-' + dataId).addClass('error');
            } else {
                lastIndex1 = index1;
                $('#index1-' + dataId).removeClass('error');
            }
        });

したがって、基本的にはビューを繰り返し処理し、現在のビューに問題がある場合はerrorクラスを追加します。この実装は、html で何らかのクラスを使用することで改善できるのではないかと思っていたので、dataId をまったく使用する必要はありません。

最初にコードを書いたとき、最後に dataId を追加しないと、正しくない ID の 1 つだけが強調表示されます (複数のアイテムが同じ ID を持っているため)。クラスはこの状況で機能しますか? 前もって感謝します!

4

1 に答える 1

0

if you are assigning a unique id to each element then it should work just the same as using a class name. Your issue may be with your first line in the childView function,. your dataId var may be getting the same value each time, and not the current item you are iterating over. Im not familiar with undescore, but you might try something like var dataId = this.model.get('dataId');

于 2013-04-04T03:29:45.293 に答える