Tại sao View lại cần dùng đến Router?

Tại sao View lại cần dùng đến Router?

Sam86 Club Choi Game Bài,Net79 Club Game Bài Uy Tín Nhất 2024,Tipgamebai Game Bài 247

Phụ thuộc vòng tròn trong BackboneJS

Ngày cập nhật: 12-12-2015 | Lượt xem: 8941 | Danh mục: BackboneJS

Tìm kiếm

Lỗi không bắt được: Tên module “router” chưa được tải lên cho ngữ cảnh: _

Hôm nay khi đang viết một chức năng đơn giản để tạo mới trang, mình đã gặp phải lỗi trên. Lỗi này xuất phát từ file views/new_item.js với đoạn code sau:

1
var Router = require('router');

Đã kiểm tra kỹ đường dẫn và xác nhận rằng file router.js đã được load thành công, nhưng vẫn bị báo lỗi. Khi so sánh lại nội dung của router.js, mình thấy đoạn code như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
define(function(require) {
  var Backbone = require('backbone');
  var NewItem = require('views/new_item');
  var AdminRouter = Backbone.Router.extend({
    ...
    newItem: function() {
      var newItem = new NewItem();
      newItem.render();
    },
    ...
  });
});

Từ đó có thể nhận ra rằng new_item.jsrouter.js đã tạo thành mối quan hệ phụ thuộc vòng tròn (Circular Dependency).

Ví dụ như khi tạo mới một mục, mình muốn tự động trở về trang chủ bằng cách gọi:

1
router.navigate('/', {trigger: true});

Chính dòng lệnh này là nguyên nhân gây ra vấn đề Circular Dependency.

Làm thế nào để tránh phụ thuộc vòng tròn do Router gây ra?

Thay vì sử dụng router.navigate, ta có thể dùng cách sau để thực hiện điều hướng mà không cần tham chiếu trực tiếp tới Router:

1
Backbone.history.navigate('/', true);

Cách này giúp bạn tránh được việc gọi ngược từ View sang Router, giảm thiểu rủi ro tạo nên chuỗi phụ thuộc vòng tròn giữa các module.

Tài liệu

  • Lịch sử trình duyệt - Nên dùng cái nào? Backbone.js Router.navigate và window.location.hash – Stack Overflow
  • JavaScript - Sự kiện thay đổi route trong Backbone – Stack Overflow
comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy