2013-05-07 47 views
5

Tôi muốn biết liệu có thể gọi chức năng xem từ một chế độ xem con với BackboneJS hay không. Nếu có, nó hoạt động như thế nào?Chức năng xem cuộc gọi từ subview với BackboneJS

Tôi muốn gọi hàm "hello" thuộc về chế độ xem chính từ chế độ xem phụ.

Có lẽ nếu sự kiện kích hoạt ...

Ví dụ:

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(); 
    } 

}); 

Cảm ơn!

+0

bạn đã thử mở rộng 'MainView' bằng' var SubView = Backbone.MainView.extend' chưa? Điều đó sẽ cho phép bạn gọi hàm 'hello' từ bên trong' SubView'. –

Trả lời

8

Bạn có thể vượt qua một tài liệu tham khảo từ cái nhìn cha mẹ của bạn để subview của bạn:

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

Bạn có thể thử mở rộng MainView như thế này:

var SubView = MainView.extend({ });

Đó nên sau đó cung cấp cho bạn tham chiếu đến hàm hello trong phạm vi MainView.

Hoặc, trong SubView, thêm video này vào chức năng render của bạn:

MainView.prototype.hello.call(this) 

Đó sẽ gọi hello chức năng trong MainView sử dụng bối cảnh (template, vars khác, vv) của SubView dụ.

+0

Điều này hoạt động nhưng nó được gọi là hello như là một phương pháp tĩnh. Nó sẽ không thể truy cập trạng thái của cá thể MainView đã tạo SubView. –

+0

anh ấy có muốn truy cập trạng thái của chế độ xem gốc không? –

+2

Không chắc chắn nhưng ít nhất bây giờ anh ta biết khi nào nên sử dụng phương pháp tham chiếu/tùy chọn so với một cuộc gọi tĩnh. –

Các vấn đề liên quan