2013-09-29 59 views
7

Lợi ích chính là gì backbone.wreqr có hơn một đối tượng js , cả hai trường hợp đều có quyền truy cập vào tập hợp sự kiện của marionette.
Sẽ không gán/gọi các phương thức từ một đối tượng hoạt động theo cách tương tự như Lệnh/RequestResponse. Với tôi tôi thấy không cần phải thực hiện điều này ngoài việc đưa ra ngữ nghĩa/khả năng đọc +1.Backbone.Wreqr vs đối tượng Javascript

https://github.com/marionettejs/backbone.wreqr
Ai đó có thể vui lòng khai sáng cho tôi, đây là ứng dụng xương sống đầu tiên (và mô-đun) của tôi.

Trả lời

12

Những lợi ích là:

  • sự kiện và lệnh xử lý là tùy chọn và bạn không cần phải kiểm tra bằng tay mình cho undefined s
  • tùy chọn nhiều trình xử lý cho mỗi sự kiện
  • thực hiện lệnh chậm (sự kiện cháy trước tiên, đăng ký lệnh sau và ngay lập tức sẽ được thực hiện)
  • bạn có thể xác định phạm vi thực hiện bằng cách sử dụng bất kỳ phương thức bổ sung nào như $.proxy, ...
+1

Cảm ơn, Chỉ cần những gì tôi đang tìm kiếm! Điểm # 1, vì vậy nếu không có trình xử lý nào xuất hiện thì sẽ không có lỗi nào được ném khi lệnh.execute ("lỗ đen") được kích hoạt? –

+0

@toxinhead đúng vậy! – Creynders

8

Nó cung cấp triển khai một số phổ biến messaging patterns, bao gồm Event Aggregator Pattern, Command PatternObserver Pattern.

Các mẫu này tạo thuận lợi cho việc tách các triển khai nhằm giảm phụ thuộc đối tượng. Hãy xem xét một trò chơi phong cách "Combat" đơn giản bao gồm một chiếc xe tăng và một số mục tiêu. Nếu không có mẫu tin nhắn, bể cần phải có kiến ​​thức rõ ràng về mục tiêu và cách họ làm việc, và trong thực tế không thể tồn tại mà không có sự target định nghĩa:

var Tank = function(targets) { this.targets = targets }; 
Tank.prototype.fire = function() { 
    var self = this, 
     HpLoss = -500; 
    _.each(this.targets, function(target) { 
    if (self.isNear(target.coordinates) && target.canWithstand(HpLoss)) { 
      target.die(); 
    } 
} 


var target1 = new Target(coordinatesA, armorA); 
var target2 = new Target(coordinatesB, armorB); 
var tank = new Tank([target1, target2]); 

Sử dụng các mẫu tin nhắn như Observer, tank trong đoạn code trên doesn' t cần kiến ​​thức về các mục tiêu của nó; đúng hơn, các mục tiêu có thể xác định cho mình cho dù họ nên chết:

var Target = function() {} 
Target.prototype.calculateDamage = function(coordinates, damage) { 
    if (this.isNear(coordinates) && !this.canWithstand(damage)) { 
     this.die(); 
    } 
} 

var Tank = function() {}; 
Tank.prototype.fire = function() { 
    this.trigger('fire', { damage: 400, coordinates: this.location }); 
}; 

// Now Tank is entirely self-contained, and some external mediator can 
// make things happen at will: 

function main() { 
    var target1 = new Target(coordinatesA, armorA); 
    var target2 = new Target(coordinatesB, armorB); 
    var tank = new Tank(); 

    target1.listenTo(tank, 'fire', target1.calculateDamage, target1); 
    target2.listenTo(tank, 'fire', target2.calculateDamage, target2); 

    tank.fire(); 

    var target3 = new Target3(coordinatesB, armorB); 
    target3.listenTo(tank, 'fire', target3.calculateDamage, target3); 
} 
+1

Xin chào Chris, cảm ơn câu trả lời, mặc dù nó không trả lời câu hỏi ban đầu của tôi. Ví dụ của bạn là tiết lộ quy trình làm việc của Nhà đăng ký/Nhà xuất bản có trong Event Aggregator. Các lệnh/yêu cầu của Wreqr là những gì làm tôi mất, cho đến khi làm rõ các phương thức này chỉ tồn tại cho các lý do ngữ nghĩa/dễ đọc. –

+0

Wow, yea, tôi hoàn toàn hiểu nhầm điều đó. Lấy làm tiếc. –

+2

Tuy nhiên, đây là một bình luận tuyệt vời. –

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