2013-04-05 1 views
0

jqGrid과 함께 Backbone.js을 사용하고 그리드를 나타내는보기가 있습니다. 코드는 다음과 같습니다.Backbone.js에서 올바른 이벤트 대상을 얻는 방법 jqGrid 이벤트를 수신합니까?

var GridView = Backbone.View.extend({ 
    initialize:  function(){ 
     _.bindAll(this); 
    }, 
    beforeSelectRow:function(e){ 
     return $(e.target).is('img') ? false : true; 
    }, 
    render:   function(){ 
     var self = this; 

     this.$el.load(
      this.collection.url + 'grid/', 
      function(){ 
       self.$jqGrid = self.$('.jqGrid'); 
       self.$jqGrid.on('jqGridBeforeSelectRow',self.beforeSelectRow); 
      } 
     ); 

     return this; 
    } 
}); 

그리드의 행에는 이미지가 포함될 수 있습니다. 이미지를 클릭하면 그리드 행이 선택되지 않을 것으로 예상됩니다. jqGrid에 의해 트리거 된 트리거 된 이벤트 jqGridBeforeSelectRow을 수신하지만 올바르지 않은 이벤트 대상을 수신합니다. 나는 이벤트 타겟이 이미지라고 기대한다. 나는 비슷한 질문을 발견했다 JQGrid Not select row when clicking in a particular cell 그리고 모든 작품입니다. 청취자는 무엇이 잘못 되었습니까?

감사합니다.

답변

1

본인은 직접 백본을 사용하지 않지만 올바른 것으로 알고 싶습니다. 그리드 내부의 이미지에 클릭이있는 경우 그리드의 행 선택을 거부하려고합니다. 콜백 beforeSelectRowjqGridBeforeSelectRow 이벤트의 이벤트 처리기입니다. 난 당신이 다음 같은 이벤트 핸들러를 해결 이해한다면 e.target 항상 그리드의 기본 요소 인 <table> 요소의 DOM 때문에 하나

$("#list").bind("jqGridBeforeSelectRow", function (e) { 
    return $(e.target).is('img') ? false : true; 
}); 

이벤트 핸들러가 잘못되는 다음과 같은 방법을 결합 할 수있다. 그 이유는 jqGridBeforeSelectRow<table> 요소의 사용자 정의 이벤트입니다.

올바른 구현 될

$("#list").bind("jqGridBeforeSelectRow", function (e, rowid, eventOriginal) { 
    return !$(eventOriginal.target).is("img"); 
}); 

eventOriginal은 "jqGridBeforeSelectRow"이벤트를 시작한 원래 click 이벤트의 이벤트 객체를 나타냅니다. Backbone 버전으로의 변경 사항은 분명 할 것입니다.

The demo 결과를 보여줍니다.

+0

답장을 보내 주셔서 감사합니다. 이제 모든 것이 작동합니다. –

+0

@IgorTimoshenko : 천만에요! – Oleg

2

우선, 변경하십시오 :

return $(e.target).is('img') ? false : true; 

에 :

return !$(e.target).is('img'); 

둘째, 당신은 리스너가 걸리는 인수 (ROWID, 전자) 것을 말한다 jqGrid's doc을 살펴 있어야합니다. 그래서 기본적으로 당신이 사용하는 e 인수는 대상 키가 전혀없는 ROWID입니다.

세 번째로 Backbone's doc을보고 최신 버전 인 경우 _.bindAll(this)을 제거하고 self.listenTo(self.$jqGrid, self.beforeSelectRow)과 같은 Model # listenTo 메서드를 사용하는 것이 좋습니다.

beforeSelectRow 이벤트가 $ jqGrid 요소에 의해 트리거되는지 마지막으로 중요합니까? 그렇지 않을 수도 있습니다. 그러나 그것은 그러한 변경 후에도 작동하지 않는지를 확인하는 것입니다.

+0

+1 나. 나는 당신이 주요 문제를 정확하게 캐싱했다고 생각합니다. 문제와 해결책이 jQuery와 jqGrid의 용어로 어떻게 공식화 될 수 있는지에 대한 답을 설명했습니다. – Oleg

+0

답장을 보내 주셔서 감사합니다. –

관련 문제