2014-05-13 34 views
0

我的模板一打淘汰賽事件綁定了代碼,每個需要一個事件處理,看起來像因子從模板

event: { 
vclick: function (data, event) { 
    $parents[1].cellClick($parents[1].rows()[$parentContext.$index()], data, event) 
    } 
} 

我怎樣才能使這個更短,更好地處理?我嘗試了事件處理程序移動到視圖模型,但我有麻煩繞過結合上下文屬性($父母等)

編輯:有在$ parentContext $指數(缺少$),這是cellClick代碼,它確實沒有什麼特別的:

self.cellClick = function (row, data, event) 
{ 
    var rowData = self.getRowObject(row.Items()); 
    var cellData = rowData[data.Key()]; 
    self.rowClickHandler(cellData, rowData, event); 
    return true; 
} 
+0

因此'vclick'調用'cellClick',然後調用'rowClickHandler'。 'rowClickHandler'是做什麼的?不是跳過所有的點擊處理程序,而是直接調用要執行的函數可能會更好。 – sroes

+0

「rowClickHandler」應該由用戶設置,而「cellClick」不是 – TvdH

回答

1

如果你通過母公司和其索引你可以將它移動到您的視圖模型

self.vclick = function(data, event, parent, rowIndex) { 
    parent.cellClick(parent.rows()[rowIndex], data, event); 
}; 

但是這並不正確。如果您可以分享更多代碼(cellClick?),我們可以確定是否有更好的方法。

+0

謝謝,我編輯了試圖詳細闡述的問題 – TvdH

+0

謝謝,我使用了這個建議,最終的表達式沒有太多簡短但肯定更具可讀性:'事件:{vclick:function(data,event){$ parents [1] .cellClick(data,event,$ parentContext。$ index()); }}' – TvdH

1

你可以試試這個結合:

event: { mouseover: $parents[1].myOver.bind($data, $parentContext, $parents[1]) } 

隨着你的項目的盛大母公司的模型功能myOver

this.myOver = function (parentContext, parents1) { 
    alert("Data: " + JSON.stringify(parents1)); 
} 

中,你將能夠訪問$parentContext可變parentContext,$parents[1]parents1和你的項目的結合($data)與this

見這個例子:

vclick: function(data, evt) { 
    $root.vclick(data, event, $parents[1], $parentCountext.index()); 
} 

然後在您的視圖模型可能是這樣的:jsFiddle

+0

這看起來不錯,只有他的事件丟失(並且稍後在代碼中需要event.target)。爲了做到這一點,我必須再次將表達式包裝到函數(事件)語句中,對嗎?它不會比原始表達式短得多。但至少長期的表達是我們的因素。 – TvdH