2013-07-29 42 views
5

Không nên xem giao diện Marionette đóng lại để xác định các sự kiện đã xác định (sự kiện, modelEvents, CollectionEvents) khi hiển thị lại?Hiển thị chế độ xem Giao diện người đóng kín

Dường như tôi phải gọi theo cách thủ công delegateEvents sau khi đóng và hiển thị lại chế độ xem. Nếu không, chế độ xem sẽ không hoạt động như mong đợi.

http://jsfiddle.net/4DCeY/

var app = new Marionette.Application(); 

app.addRegions({ 
    main: '.main' 
}); 

var MyView = Marionette.ItemView.extend({ 

    template: _.template('Hi, I\'m a view! Foo is: <%= foo %>'), 

    modelEvents: { 
     'change': 'onChange' 
    }, 

    onChange: function() { 
     alert('change!'); 
    } 
}); 


var Model = Backbone.Model.extend({}); 


app.addInitializer(function() { 
    var m = new Model({foo: 'bar'}); 
    var myView = new MyView({ 
     model: m 
    }); 

    app.main.show(myView); 
    myView.close(); 
    app.main.show(myView); 

    m.set({foo: 'baz'}); 

}); 

$(document).ready(function(){ 
    app.start(); 
}); 
+0

và nếu có, có thể bạn đang làm gì đó sai trong chế độ xem, bạn có thể dán mã của chế độ xem có vấn đề của mình không – ekeren

+0

Hãy xem đoạn mã sau: http: // jsfiddle.net/4DCeY/Nếu mọi thứ sẽ hoạt động tốt, thông điệp cảnh báo sẽ được hiển thị –

Trả lời

6

Nếu tôi hiểu câu hỏi của bạn đúng, có nhiều vấn đề mở github về việc này.

Ví dụ:

https://github.com/marionettejs/backbone.marionette/pull/654 https://github.com/marionettejs/backbone.marionette/issues/622

Thời gian qua tôi đã kiểm tra, Derick (tác giả của rối) không cảm thấy như tái sử dụng quan điểm khép kín nên có một cái gì đó khu vực nên làm.

Vì vậy, bạn có thể

  1. chỉ cần tạo một cái nhìn mới và cho thấy rằng một
  2. tay gọi delegateEvents - nhưng có một vấn đề với nhiều ràng buộc sự kiện mà tôi không thể nhớ ngay bây giờ, vì vậy hãy cẩn thận về điều đó (không phải tại nơi làm việc ngay bây giờ, vì vậy có thể không mất một peek vào mã, xin lỗi)
  3. viết quản lý khu vực của riêng bạn
  4. hoặc chờ và xem nếu Derick sẽ hợp nhất một trong những yêu cầu kéo
+0

OK, cảm ơn bạn! Tôi nghĩ rằng tôi sẽ cố gắng thực hiện riêng. Chỉ muốn đảm bảo không có cách nào khác để làm điều này với marionette! –

+0

BTW: đây là cuộc thảo luận ban đầu về github: https://github.com/marionettejs/backbone.marionette/issues/223 – django

0

một vài điểm:

  1. Bạn không cần phải gọi myView.close() rối Region sẽ chăm sóc khi bạn hiển thị khác xem
  2. Marionette.Region sẽ không thay thế cùng một chế độ xem với chính nó. Nó sẽ chỉ cần bỏ qua các thủ tục không cần thiết nếu bạn muốn kiểm tra này một cách chính xác bạn cần 2 lượt xem
  3. Nếu bạn muốn có một sự thay đổi trong mô hình để gọi làm cho bạn một cách rõ ràng phải viết nó

tôi thay đổi các jsfiddle với những điều sau đây :

  1. thêm myView1 và myView2
  2. loại bỏ cuộc gọi rõ ràng để myView.close
  3. bổ sung một ghé cho this.render() từ chức năng onChange

Đây là jsfiddle chỉnh http://jsfiddle.net/4DCeY/1/:

app.addInitializer(function() { 
    var m = new Model({foo: 'bar'}); 
    var myView1 = new MyView({ 
     model: m 
    }); 
    var myView2 = new MyView({ 
     model: m 
    }); 

    app.main.show(myView1); 
    app.main.show(myView2); 

    m.set({foo: 'baz'}); 

}); 

Và:

onChange: function() { 
    alert('change!'); 
    this.render(); 
} 
+0

Có, tôi nhận được quan điểm của bạn, nhưng chúng tôi đang nói về các kịch bản khác nhau, tôi nghĩ. Trong ví dụ của tôi, tôi muốn sử dụng lại chế độ xem đã đóng, tôi không muốn thay thế nó bằng một phiên bản khác. Bất kể cách bố trí hoạt động như thế nào, cá thể khung nhìn sẽ được đóng lại và hiển thị lại. –

+0

@MalteWe - Tôi không chắc tôi hiểu, Tại sao bạn đóng chế độ xem? – ekeren

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