2013-02-12 23 views
6

Trong Layout sau đây, tôi thêm CollectionView để hiển thị danh sách SELECT trong phạm vi onRender. Ngay lập tức sau đó, tôi đang sử dụng băm ui để bật hoặc tắt tất cả các điều khiển trong chế độ xem. Điều này không làm việc cho SELECT được tạo bởi new App.View.Categories.Sự cố băm giao diện người dùng với Bố cục sơ đồ xương sống

Có nên không? Hoặc mã băm giao diện người dùng không hoạt động trên Regions trong một số Layout?

App.View.UploadFile = Backbone.Marionette.Layout.extend({ 
    template: '#upload-file-template', 
    regions:{ 
     category: 'td:nth-child(4)' 
    }, 
    ui:{ 
     inputs: 'textarea, select, .save' 
    }, 
    onRender: function(){ 
     this.category.show(
      new App.View.Categories({ 
       collection: App.collection.categories 
      }) // generates the SELECT list 
     ); 

     console.log(this.ui.inputs); // Length 2. Missing select. 
     console.log(this.$('textarea, select, .save')); // Length 3 

     this.ui.inputs.prop(
      'disabled', (this.model.get('upload_status')!='staged') 
     ); 
    } 
}); 

Trả lời

11

Điều này sẽ hoạt động theo cách bạn mong đợi nó hoạt động. Các mã trong câu hỏi trong nguồn rối là ở đây: https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.itemview.js#L49-L51

các cuộc gọi đến bindUIElements() là những gì chuyển đổi ui băm trong các đối tượng selector jQuery, và nó được gọi vào trước phương thức onRender được gọi.

Bạn có gặp lỗi không? Hoặc là bộ chọn chỉ đơn giản là không trả lại gì, và không ảnh hưởng đến các phần tử?


Cập nhật:

Ah! Tất nhiên ... Tôi đã không chú ý đến mã của bạn đủ gần. Bạn đúng trong đó bộ chọn thành phần giao diện người dùng xảy ra trước khi bạn thêm chế độ xem phụ vào khu vực. Tôi đã không bao giờ chạy vào tình huống này trước đây ... nhưng điều này có vẻ như một cái gì đó chúng tôi sẽ muốn sửa chữa/hỗ trợ.

Hiện tại, giải pháp tốt nhất mà tôi có thể đề xuất là gọi 'this.bindUIElements();' vào cuối phương thức onRender của bạn. Điều này sẽ buộc các yếu tố ui liên kết lại với các bộ chọn.

Tôi cũng sẽ thêm sự cố vào danh sách các vấn đề về github, để xem giải pháp tốt hơn cho vấn đề này. Tôi không biết khi nào tôi có thể làm được điều này, nhưng điều này ít nhất sẽ có được nó trong danh sách những thứ cần sửa chữa.

+0

Không có lỗi. Tôi đã thêm một số ví dụ về console.log ở trên. Bộ chọn sẽ bỏ chọn lựa, nhưng nó sẽ trả lại hai phần tử còn lại. Như bạn có thể thấy bởi console.log thứ hai, cùng một bộ chọn được bọc trong $ works. – Bart

+0

Nhìn vào nguồn, tôi nghĩ rằng tôi thấy vấn đề. Các mục đó bị ràng buộc TRƯỚC KHI mục SELECT được thêm vào trong onRender. Có lẽ thêm các khu vực như thế này, trong onRender, không phải là thực hành tốt nhất. Bạn có mô hình khác để giới thiệu không? – Bart

+0

Cảm ơn bạn đã cập nhật! – Bart

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