2013-05-07 17 views
5

Chciałbym wiedzieć, czy można wywołać funkcję widoku z podglądu za pomocą BackboneJS. Jeśli tak, jak to działa?Funkcja podglądu połączeń z podglądu z BackboneJS

Chcę wywołać funkcję "hello", która należy do mainView z widoku podrzędnego.

Może jeśli zdarzenie wyzwalające ...

Przykład:

var MainView = Backbone.View.extend({ 

    initialize: function() { 
     this.$template = $(template); 
     this.subview = new SubView();    
     this.render();    
    }, 

    render: function() { 
     this.$el.html(this.$template); 
     var element = this.$template.attr('id'); 
     this.subview.setElement('#'+element).render(); 
    }, 

    hello: function() { 
     alert('Hello'); 
    } 

}); 


var SubView = Backbone.View.extend({ 

    initialize: function() { 
     this.$template = $(template);   
     this.render();    
    }, 

    render: function() { 
     this.$el.html(this.$template); 
     //Call view function ' hello ' 
     //parentView.hello(); 
    } 

}); 

Dzięki!

+0

Czy próbowałeś rozszerzyć swój 'MainView' z' var SubView = Backbone.MainView.extend'? To powinno umożliwić wywołanie funkcji 'hello' z poziomu' SubView'. –

Odpowiedz

8

można przekazać odwołanie od widoku macierzystego do podrzędny:

http://jsfiddle.net/puleos/hecNz/

var MainView = Backbone.View.extend({ 

    initialize: function() { 
     this.$template = $("<span>foo</span>"); 
     this.subview = new SubView({parent: this});    
     this.render();    
    }, 

    render: function() { 
     this.$el.html(this.$template); 
     var element = this.$template.attr('id'); 
     this.subview.setElement('#'+element).render(); 
    }, 

    hello: function() { 
     alert('Hello'); 
    } 

}); 


var SubView = Backbone.View.extend({ 

    initialize: function(options) { 
     this.$template = $("<span>bar</span>"); 
     this.parent = options.parent; 
     this.render();    
    }, 

    render: function() { 
     this.$el.html(this.$template); 
     this.parent.hello(); 
    } 

}); 

var mainView = new MainView(); 

console.log(mainView); 
2

Można spróbować przedłużające tak MainView:

var SubView = MainView.extend({ });

które powinny następnie daje ci odniesienie do funkcji hello w obrębie MainView.

Albo w SubView, dodać do swojej funkcji render:

MainView.prototype.hello.call(this) 

To by wywołać funkcję hello w MainView użyciu kontekstu (szablon, inni Vars, etc) instancji SubView.

+0

Działa to, ale wywołuje hello jako metodę statyczną. Nie może uzyskać dostępu do stanu instancji MainView, która utworzyła SubView. –

+0

czy chce uzyskać dostęp do stanu widoku rodzica? –

+2

Nie jestem pewien, ale przynajmniej teraz wie, kiedy użyć metody referencji/opcji zamiast połączenia statycznego. –

Powiązane problemy