2012-03-06 67 views
1

因此,我使用backbone.js一次为多个数据获取多个条目。这些数据将最终形成一个时间表。我现在需要做的是弄清楚如何不断检查输入到一个项目视图中的三个数据字段,并在另一个项目视图中重复。在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 OOM和星期几。

我的验证需要确保同一会话中同一天没有两个类被选中。

我该如何去设置事件或任何我会用来查看在上一个itemview中选择的数据?

+0

是'ClassTimes'骨干集合吗?它似乎是一个数组。是'ClassTimes'骨干模型中的元素吗?我只问,因为你没有使用'model.escape(“RoomId”)' – timDunham 2012-03-07 00:15:48

回答

0

我决定不尝试在客户端验证,但在后面的代码。在控制器中,我检查了传入的列表是否有任何此类冲突,并在发现任何此类时向表单返回了错误通知。工作得不错。我正在努力突出显示冲突项目。

1

好吧,很难说没有看到你的任何骨干公司,但如果你正在寻找模型验证让我刷我自己的软件:Backbone.Validator

它是Backbone.Model类的混合,允许您向模型中添加通用验证测试,并在验证失败时实现默认值(这也会触发error消息)。

您可以对两个视图使用相同的模型并与验证结合使用,以确保这些值在两个视图中均可用并经过验证。