2012-07-23 2 views
0

내 Backbone.View에서 어린이 이벤트를 듣고 싶습니다. 나는 이것이 이것이 올바른 방법 일 것이라고 생각했지만 확실하지 않습니다. 상위의 업데이트 함수가 호출되지 않습니다. 도와 주셔서 감사합니다.Backbone.View의 하위 이벤트 수신

text.js.coffee

class App.Views.Text extends Backbone.Views 

    initialize: -> 
    @_styleToolbar = App.Views.StyleToolbar el: $("#style_toolbar") 
    @_styleToolbar.on("update", @update()) 

    update: -> 
    # update text color, font etc 

style_toolbar.js.coffee

class App.Views.StyleToolbar extends Backbone.Views 
    'change .font_face select' : 'update' 

    update: (e) -> 
    $(@el).trigger('update', @el) 

이 코드의 단순화 된 버전이기 때문에 누락 된 것이 있으면 알려주세요, 나는거야 그것을 업데이트하십시오.

답변

1

아무 문제없이 백본보기에 Backbone.Events이 섞여 있습니다.

그 코드에는 몇 가지 문제가 있습니다. 이벤트를 트리거하는 것이 무엇인지 수정해야하며, el이 아닌보기에서 트리거하려고합니다. 이 :

$(@el).trigger('update', @el) 

은 다음과 같아야합니다

@trigger('update', @) 

가 나는 또한 단지의 el보다 단지 @ 그래서 청취자가 전체 뷰 객체에 액세스 할 수 있습니다 오히려에 @el 투입합니다.

그리고, 리스너는 함수의 반환 값이 아닌 함수를 바인딩해야합니다

@_styleToolbar.on("update", @update) 

당신이 @update()은 다음 @update를 호출하고 "update" 이벤트에 반환 값을 바인딩 할 수 있습니다 사용하는 경우. 당신은뿐만 아니라 fat-arrow (=>)으로 update을 정의 할 수 있습니다 : update가 호출 될 때 올바른 @ (AKA this을) 줄 것이다

update: (toolbar) => 
    # update text color, font etc 

.

+0

감사합니다. mu, 지금 시도해 보겠습니다. 이런 식으로 일하는 것이 좋습니다까요? 또는 이들은 단지 서로를 무시하고 모델/컬렉션 업데이트를 통해 통신해야합니까? (이러한 변경 사항은 DB에 저장되므로)? 나는 종종 부모님의 일부분을 부모님의 일부로 만듦을 제안하는 내용의 게시판을 보았으나, 그것은 나에게 매우 건조하거나 우습게 보이지 않습니다. – botbot

+1

@ masterkrang : (평소대로) 다릅니다. 설정을 영속적으로 만들고 싶다면'Text'가 (''change 이벤트''를 위해) 듣고''StyleToolBar'''를'set'을 호출하는 별도의 설정 모델이 의미가 있습니다. 지속성을 원하지 않으면 간단한 'Backbone.Events' 인스턴스를 간단한 pub-sub 오브젝트로 사용할 수 있습니다. 이벤트를 통해 서로 이야기하는 관점은 간단하지만 상황이 더 복잡해지면 다른 접근 방식 중 하나로 전환 할 준비가되어 있어야합니다. –

+0

이 구현되어 작동하고있는 것 같습니다. 다시 한 번 감사드립니다. "일이 더 복잡해질 때"나중에 더 많이 돌아올 것입니다. :) – botbot