2013-04-12 2 views
5

backbone.js의 render 함수에서 좀 더 구체적으로 말하지만, 좀 더 구체적으로는 click이지만 작동시키지 못합니다. 내 백본보기의 이벤트 섹션에 대한backbone.js 이벤트를 render()로 트리거합니다.

App.ProductView = Backbone.View.extend({ 

className: 'title_products_tab', 
el: $('.title_products_tab'), 

events: { 
    'click .product_list .edit_product' : 'edit', 

:

나는 비슷한 (하지만 매우 단순화 된) 설정이 있습니다.

render: function(){ 
     console.log($._data($('.title_products_tab .product_list .edit_product')[0], "events")); 
     $('.title_products_tab .product_list .edit_product').trigger('click'); 

작동하지 않는, 요소의 _data가 나는 경우가 있기 때문에 나머지 내보기 기능으로 작업을 수행 알고있다, 그러나, 정의되지 않은 : 아래로 렌더링 함수 내 나는 바인딩 .edit_productclick 이벤트를 트리거 할 따라서. 난 그냥 render 또는 시작시 다른 곳에서 이벤트를 트리거 할 수없는 것 같습니다.

내가 생각 :

this.trigger('click .product_list .edit_product'); 

는, 그러나 다시 운이 작동하지 않을 것이다.

나는 또한 bindAll에 대해 들었지만 이것을 사용하는 것은 좋지 않다고 들었습니다.

그렇다면 백본보기의 시작 이벤트를 어떻게 시작합니까?

var View = Backbone.View = function(options) { 
    this.cid = _.uniqueId('view'); 
    this._configure(options || {}); 
    this._ensureElement(); 
    this.initialize.apply(this, arguments); 
    this.delegateEvents(); 
}; 

특히 마지막 부분 :

+0

당신이 당신이 방법을 렌더링 호출 (난 당신이 정말 당신이 할 방법을 수행해야하는 경우 수동 delegateEvents를 호출 할 수도 있겠죠)? 초기화 메서드에서? – Loamhoof

+0

@Loamhoof 사실, init 메소드 – Sammaye

답변

2

그래서 당신이 흥미 (: 백본의 코드 메모를) 찾을 수 있습니다. 후에 이벤트가 에 바인딩되어 있으므로 initialize 메서드가 호출되므로 render 메서드가 호출 된 후 호출됩니다. 이벤트는 아직 묶여 있지 않습니다.

+0

백본에서 지원되는 우아한 방법이 있습니까? : – Sammaye

+0

글쎄, 당신이 간단하게 메서드를 호출 할 수있을 것 같아요 :'this.edit()'. 한 줄의 코드를 다른 줄로 바꾸고,별로 나쁘지는 않네요;) – Loamhoof

+0

그것이 붙어 있지만 좋은 생각입니다. 제품 목록 및 그 목록의 크기가 1 인 경우 사용자 목록에 해당 항목 만 선택합니다. 내부 코딩을 통해 해당 항목을 선택하는 것이 좋지 않습니다. 나는 현재 기존 폼의 프론트 엔드를 표준화하는 수단으로 백본을 사용하고있다. 아, 그냥 대리인, 감사합니다 :) – Sammaye

관련 문제