2013-11-26 4 views
0

У меня есть следующий Магистральный Посмотреть'S:Как связать контекст представления ребенка обработки событий в родительском представлении

var ParentView = Backbone.View.extend({ 
    events: { 
     "contextmenu .child-view" : "handleChildView" 
    }, 

    initialize: function() { 
     // create child view 
     var child = new ChildView; 
    }, 

    handleChildView: function() { 
    } 
}); 

var ChildView = Backbone.View.extend({ 

    initialize: function() { 
     this.el.addClass('child-view'); 
    } 
}); 

мне нужно обрабатывать событие Контекстного childView в обработчике в handleChildView. Но мне нужно получить refference для элемента childView и target DOM.

Как я могу это сделать?

+0

Не могли бы вы объяснить, а это: "Но я нужно получить refference для childView и целевого элемента DOM «какова ваша цель? –

+0

Мне нужно обработать контекстное меню childView в parentView – Erik

ответ

1

Я обычно хотел бы попробовать, чтобы избежать этого. Я думаю, что это анти-шаблон, поскольку я считаю, что каждая точка зрения должна обрабатывать только собственные события.

Когда есть необходимость уведомления события между видами, я использую шаблон шины событие (издатель/абонент)

см этот ответ я отправил раньше:.

Call a function in another Marionette.ItemView

Это похоже.

В вашем приложении должна быть определена шина событий. А в вашем ChildView, опубликовать событие, когда что-то случится (например, мыши)

var ChildView = Backbone.View.extend({ 
    events: { 
    'click': 'handleClick' 
    }, 
    handleClick: function() { 
    //publish event 
    EventBus.trigger('childViewClicked', [anything you wanna pass]); 
    } 
}); 

и в вашем родительском зрения, подписаться на это событие:

var ParentView = Backbone.View.extend({ 
    initialize: function() { 
    //subscribe events: 
    EventBus.on('childViewClicked', this.handleChildView, this); 
    }, 

    handleChildView: function ([params you wanna receive]) { 
    } 
}); 
0

Будет ли это работать на вас?

var ParentView = Backbone.View.extend({ 
    events: { 
     "click .child-view .contextmenu" : "handleChildView" 
    }, 

    initialize: function() { 
     // create child view 
     var child = new ChildView; 
    }, 

    handleChildView: function() { 
    } 
}); 

var ChildView = Backbone.View.extend({ 
    className:'child-view' 
    , initialize: function() { 
     this.el.addClass('child-view'); 
    } 
}); 

Вы могли бы оказать вид ребенка внутри родительского вида (в DOM)

Смежные вопросы

 Смежные вопросы