2013-05-03 19 views
1

Agility.js documentation似乎很清楚地說,敏捷的對象可以接受任何有效的jQuery的事件類型:Agility.js + jQueryUI的,參數傳遞給事件處理程序控制器

平時DOM事件,如點擊,DBLCLICK,的mouseenter等通過 jQuery的事件API支持。請查閱jQuery的API以獲取支持的事件列表。

但是在我看到的文檔和所有其他示例中,綁定到事件的所有控制器函數都沒有參數。例如,下面的代碼段取直出the online docs

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', { 
    'click &': function() { 
    this.model.set({msg:"I've been clicked!"}); 
    } 
}); 
$$.document.append(button); 

這裏連接到click事件顯然是無參數的拉姆達。這對於普通的jQuery事件來說工作正常,但爲了使用jQueryUI事件,每個事件函數都有相關的數據。例如,如果我想使用DraggableDroppable窗口小部件,則可以在Droppable上調用drop()函數來指示Draggable已經被放到它上面,並且我需要參數drop(event, ui)來確定它是哪個Draggable。

有什麼辦法來聲明我的控制器事件處理程序,以便我可以訪問這些參數?另外,還有其他方法可以做我想做的事嗎?沒有得到任何關於控制器以外的事件的信息,而不是「被解僱」似乎是一個真正的缺點。我甚至不確定是否可以擴展Agility,以便它可以處理除標準DOM之外的其他事件,儘管我從閱讀代碼時看不到任何理由。

敏捷確實提供了一個trigger()函數用於觸發事件的客戶端代碼,它允許事件類型以外的參數。不知何故,我想到了jQueryUI事件的接線,但我沒有看到如何。更重要的是,如果控制器無法看到它們,爲什麼甚至可以將參數傳遞給trigger()

回答

1

該示例沒有顯示它是不幸的,但這並不意味着該論據不存在。

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', { 
    'click &': function(jqEvent) { 
    this.model.set({msg:"I've been clicked!" + jqEvent.target.nodeName}); 
    } 
}); 
$$.document.append(button); 

疑問時只需在您的事件處理程序console.log(arguments),看看自己。你會得到jQuery給你的相同的參數。

如果你試驗.trigger()和額外的參數,你會發現那裏也沒有驚喜。

+1

謝謝,這工作正常!事實證明''事件'和'ui'參數傳遞給Agility控制器事件處理程序,因此連接jQueryUI小部件與普通的jQuery沒有區別。 – dodgethesteamroller 2013-05-03 22:34:25

相關問題