2012-08-01 32 views
6

Tôi cần có đối số cho các hàm được sử dụng trong đối tượng sự kiện trong Backbone.Cách chuyển đối số cho các hàm được liên kết trong đối tượng sự kiện trong backbone.js

var DocumentRow = Backbone.View.extend({ 

    tagName: "li", 

    className: "document-row", 

    events: { 
     "click .icon": "open", 
     "click .button.edit": "openEditDialog", 
     "click .button.delete": "destroy" 
    }, 

    render: function() { 
     // do something 
    } 
}); 

Bây giờ hãy định nghĩa về được mở:

function open(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 

tôi sẽ gọi mở cửa từ chức năng khác và sẽ vượt qua id khi tôi gọi nó. Vì vậy, dựa trên việc tôi vượt qua id hay không tôi cần phải làm những việc khác nhau. Làm thế nào để làm điều này trong Backbone? Hiện tại, id khi được gọi qua nhấp chuột tôi mong đợi nó sẽ không được xác định. Nhưng một đối tượng sự kiện được thông qua.

Tại sao điều này lại xảy ra và làm thế nào tôi có thể vượt qua một đối số?

+0

Đây là liên quan - http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked –

Trả lời

5

Một cách khác để tiếp cận này là sử dụng một phương pháp hoàn toàn khác nhau để xử lý nhấp chuột, và các cuộc gọi "mở" để nó có thể được gọi bằng một tiến trình khác. Như một người khác đã đề cập, các phương thức mà bạn chỉ định trong hash sự kiện là các trình bao bọc ủy nhiệm jquery, vì vậy bạn không thể làm gì với các tham số như những gì bạn nhận được là những gì đại biểu cung cấp. Vì vậy, trong trường hợp đó, tạo ra một phương pháp mà không bấm vào biểu tượng thực tế mà sẽ gọi mở:

events: { 
    "click .icon": "open", 
    "click .button.edit": "openEditDialog", 
    "click .button.delete": "destroy" 
}, 
/** 
* Specifically handles the click and invokes open 
*/ 
handleIconClick : function(event) { 
    // ...process 'event' and create params here... 
    this.open(params); 
}, 
/** 
* This can be called remotely 
*/ 
open : function(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 
+0

quá trình ở đây là gì – shiva

2

Nếu bạn biết loại của biến ID bạn có thể sử dụng javascript typeof() để kiểm tra xem đúng hay bạn có thể kiểm tra xem ID là đối tượng với _.isObject từ UnderscoreJS

4

bạn có thể xem tại đây: http://backbonejs.org/docs/backbone.html#section-156

Nhất câu quan trọng là:

this.$el.delegate(selector, eventName, method); 

vì sự kiện xương sống là đại biểu jquery của (http://api.jquery.com/delegate/), do đó các tham số được truyền chỉ là thông số đại biểu mặc định jquery của pas sed.

bạn có thể cập nhật mã của bạn như thế này:

...... 

open : function(event) { 
    //get id from event 
    var id = event.xxx ;//pseudo code 
    if (id) { 
     this.openid(id); 
    } else { 
     // do something else 
    } 
}, 
//your another function direct call openid 
openid: function(id){ 
    // do something 
} 
...... 
0

Tôi nghĩ rằng Brendan hoặc fejustin của câu trả lời là tốt nhất (trên thực tế Tôi đã bỏ phiếu cho họ). Nhưng nếu bạn thực sự cam kết chỉ có một hàm, bạn có thể làm cho tham số thứ hai là id và bỏ qua tham số đầu tiên.

open : function(evt, id){ 
    if(id){ 
    //whatever 
    } else { 

    } 
}, 

someOtherMethod : function(){ 
    this.open(null, id); 
} 
Các vấn đề liên quan