2012-03-06 6 views
1

私はbackbone.jsを使用して、特定のビットのデータに対して複数のエントリを一度に取得しています。このデータは最終的にタイムテーブルを形成します。私が今必要とするのは、1つのアイテムビューに入力された3つのデータフィールドを常にチェックする方法を理解し、別のアイテムビューで繰り返すことです。ここでBackbone.jsでの検証

は、ここでは、コード

<div class="grid_16 lb-bg"> <div class="clearfix form-box bot-p bot-m"> 
<div > 
<label for="ClassTimes[{{ count }}].ClassId">Class</label> <br/> 
<select id="ClassTimes[{{ count }}].ClassId" name="ClassTimes[{{ count }}].ClassId" class="ClassList" style="Width: 20%"> 
    @foreach (var c in Model.Classes) 
    { 
     <option value="@c.Value">@c.Text</option> 
    } 
</select> 
</div> 
<div > 
<label for="ClassTimes[{{ count }}].RoomId">Room</label> <br/> 
<select id="ClassTimes[{{ count }}].RoomId" name="ClassTimes[{{ count }}].RoomId" style="Width: 20%"> 
    @foreach (var c in Model.Rooms) 
    { 
     <option value="@c.Value">@c.Text</option> 
    } 
</select> 
</div> 
<div > 
<label for="ClassTimes[{{ count }}].SessionId">Class Session</label> <br/> 
<select id="ClassTimes[{{ count }}].SessionId" name="ClassTimes[{{ count }}].SessionId" class="SessionList MakeWide" style="Width: 20%"> 
    @foreach (var c in Model.Sessions) 
    { 
     <option value="@c.Value">@c.Text</option> 
    } 
</select> 
</div> 
<div > 
<label for="ClassTimes[{{ count }}].DayId">Day</label> <br/> 
<select id="ClassTimes[{{ count }}].DayId" name="ClassTimes[{{ count }}].DayId" class="MakeWide" style="Width: 20%"> 
    @foreach (var c in Model.Days) 
    { 
     <option value="@c.Value">@c.Text</option> 
    } 
</select> 
</div> 


は、バックボーン・コードはので、このコードは、クラスの数とセッションを取ることである

window.CreateAssign = (function() { 
    var CreateAssign = {}; 

    var subs = new Array(); 
    //The next of kin item list view 
    AssignItemView = Backbone.View.extend({ 
     tagName: 'div', 
     initialize: function() { 
      //bindall 
      _.bindAll(this, 'render'); 

      this.template = _.template($('#SFTemplate').html()); 

      this.render(); 
     }, 
     render: function() { 
      $(this.el).html(this.template({ 
       count: subs.length 
      })).fadeIn(); 
      return this; 
     } 

     , 
     remove: function() { 
      $(this.el).fadeOut('fast', function() { 
       $(this).remove(); 
      }); 
      return false; 
     } 
    }); 

    function subUpdated() { 
     if (subs.length > 0) { 
      $('#removeassign').fadeIn(); 
     } 
     else { 
      $('#removeassign').fadeOut(); 
     } 
    } 

    CreateAssign.Init = function() { 
     $('#addassign').click(function() { 
      var item = new AssignItemView(); 
      subs.push(item); 
      $('#classlist').prepend($(item.el).fadeIn('fast')); 
      subUpdated(); 
      return false; 
     }); 

     $('#removeassign').click(function() { 
      if (subs.length > 0) { 
       subs.pop().remove(); 
      } 
      subUpdated(); 
      return false; 
     }); 
    }; 
    return CreateAssign; 
})(this, this.document); 

$(function() { 
    CreateAssign.Init(); 
}); 

です、r午前と曜日があります。

同じセッションで、同じセッションで2つのクラスが選択されていないことを確認する必要があります。

以前のアイテムビューでどのデータが選択されたかを確認するには、イベントなどを設定する方法を教えてください。

+0

は、ClassTimesのバックボーンコレクションですか?それは配列のようです。 'ClassTimes'バックボーンモデルの要素ですか?私はあなたが 'model.escape(" RoomId ")' – timDunham

答えて

0

私は、クライアント側ではなく、コードの背後に検証を試みないことに決めました。コントローラでは、着信リストにそのようなクラッシュがないかどうかチェックし、そのようなクラスが見つかった場合はエラー通知をフォームに返しました。うまくいく。私は衝突したアイテムを強調するために取り組んでいます。

1

あなたのバックボーンを見ずに言うのは難しいですが、モデルの検証をお探しの場合は、私自身のソフトウェアshillを利用してください:Backbone.Validator

Backbone.Modelクラス用のミックスインで、モデルに一般的な検証テストを追加し、検証に失敗するとデフォルト値を実装できます(これによってerrorメッセージがトリガーされます)。

両方のビューに同じモデルを使用して、検証と組み合わせると、値が両方のビューで使用可能であり、検証されることが保証されます。

関連する問題