0

나는 navid와 subnavid를 모두 가진 모델을 가지고 있습니다. 모델을 파괴하는 동안 navid와 동일한 navid를 가진 다른 모델의 경우 전체 컬렉션을 검사해야합니다. 모델의 하위 파티가 삭제하려고합니다. 제발 도와주세요. 미리 감사드립니다. 다음은 샘플 코드입니다.backbone.js의 같은 컬렉션에서 종속 모델을 삭제하는 방법

모델 :

VAR 노드 = Backbone.Model.extend ({ 기본값 : { 인 Navid '', SubNavId : '.' 항목 이름 : '' }}

컬렉션 :

var에 NodeCollection = Backbone.Collection.extend ({모델 : 노드}

그리고 내가 컬렉션의 노드 (내가 그럴 건물입니다)과 다른 두 가지보기 중 하나를 var에 NodeCollectionView = Backbone.View.extend ({

initialize: function (options) { 
    var self = this;  self.collection = new NodeCollection({ NavigationId: options.NavigationId }); 
    self.collection.fetch({ 
     success: function() { 
      /*I am getting hte proper collection from my restful api and iam able to bind it properly 
      self.render(); 
     } 
    }); 
}, 

render: function() { 
    var that = this; 
    _.each(this.collection.models, function (item) { 
     that.RenderEachNode(item); 
    }, this); 
}, 

RenderEachNode: function (item) { 
    var TempJsonNode = item.toJSON(); 
    var self = this; 
    var nodeView = new NodeView({ 
     tagName: 'tr', 
     id: 'NavId_' + TempJsonNode.NavItemId, 
     model: item 
    }); 
} }); 
var ItemTemplate = ""; ItemTemplate += " <td>"; ItemTemplate += "  <a><%= ItemName %></a>"; ItemTemplate +=" </td>"; ItemTemplate 
+=" <td>"; ItemTemplate +="   <a href='#' original-title='Delete ' class='tip_north Delete'>X</a>"; ItemTemplate +=" </td> ";   


var NavigationItemView = Backbone.View.extend({ 
    template: ItemTemplate, 
    render: function() { 
     var self = this; 
     var tmpl = _.template(this.template); 
     this.$el.html(tmpl(this.model.toJSON())); 
     return this; 
    }, 
    events: { 
     "click .Delete": "DeleteBtnClick" 
    }, 
    DeleteBtnClick: function() { 
     var self = this; 
     self.model.destroy({ 
      success: function (status, data) { 
       var RetData = JSON.parse(data); 
       if (RetData.Status == 'Success') { 
        $(self.el).remove() 
       } 
      }, 
      error: function() { 
       alert('Error In Deleting The Record'); 
      } 
     }); 
     return false; 
    } }); 
(I 테이블을 구축해야합니다)

나는 테이블을 제대로 만들 수 있지만 모델을 파괴하는 동안 종속 모델을 파괴 할 방법을 찾지 못했습니다. 내 API는 중첩 된 json을 얻을 수없는 방식으로 제한됩니다 (그렇다면 백본 관계로 완료). 그래서 모델의 NavId가있는 다른 모델과 뷰가 삭제되는 어떤 방법을 찾아야합니다.

도와주세요.

답변

2

어떻게 같은 약 :

var NodeView = Backbone.View.extend({ 
    initialize: function() { 
    //when the model gets destroyed, remove the view 
    this.listenTo(this.model, 'destroy', this.remove); 
    }, 
    //..clip 
    DeleteBtnClick: function() { 
    var self = this; 
    var collection = self.model.collection; 
    var navId = self.model.get('NavId'); 

    self.model.destroy({ 
     success: function (status, data) { 
     var RetData = JSON.parse(data); 
     if (RetData.Status == 'Success') { 
      //if parent was part of a collection 
      if (collection) { 
      //find related models 
      var related = collection.filter(function (model) { 
       return model.get('SubNavId') === navId; 
      }); 

      //call destroy for each related model. 
      var promises = _.invoke(related, 'destroy'); 

      //optional: if you want to do something when all the children 
      //are destroyed: 
      $.when.apply($, promises).then(function() { 
       console.log('all destroyed'); 
      }); 
      } 
     } 
     }, 
     error: function() { 
     console.log(arguments); 
     alert('Error In Deleting The Record'); 
     } 
    }); 
    return false; 
    } 
}); 

편집 : 백본 JS 난 당신이 해 봐요 나를 보여 수정하시기 바랍니다 수있는 quik를 바이올린을 준비하는JSFiddle here

+0

안녕 Fencliff 스피 새로운? –

+0

@ArunKumar, 한번보세요. 짧은 시간 내에 할 수 있다면 그렇게 할 것입니다. – jevakallio

+0

http://jsfiddle.net/eAut2/ 미안 해요. 확인해주세요. –