2015-06-23 34 views
0

我想點擊一個元素並用參數調用函數,同時也跟蹤哪個元素被點擊。 Knockout上的例子似乎只能做一個或另一個,但不是兩個。Knockout - 如何引用單擊的元素,並通過參數

在我的元素我有以下

data-bind="click: testFunction.bind($data, 1,2,3)" 

而且,我稱之爲定義如下

function(one, two, three, four){ 
    console.log("1st param: " + one); 
    console.log("2nd param: " + two); 
    console.log("3rd param: " + three); 
    console.log("4th param: " + four); 
}; 

函數的輸出沒有任何意義,我

1 PARAM :1 2nd param:2 3rd param:3 4th param:[object Object]

其中第四個參數似乎是整個視圖模型。

如何在傳遞參數時可以訪問$ event.target的點擊綁定?

+1

您不想訪問點擊目標。 \ *絕地心靈招數手勢\ *解釋你到底想達到什麼目的。 – Tomalak

+0

我想基本上做$(this).toggleClass('active')它被點擊時,除了用我發送的實際數據參數做東西。但我沒有辦法訪問$(this)。 – mls3590712

+1

這裏有'css'綁定。不要嘗試訪問您的視圖模型中的DOM,這將不可避免地結束,並在腳下開槍。 – Tomalak

回答

2

從commments:

我想basically do $(this).toggleClass('active')當它是 點擊,除了與實際數據參數 我發做的東西,但我沒有訪問$(this)

的方式。

而你不應該有辦法做到這一點。淘汰賽是關於將視圖從視圖模型中分離出來,使視圖依賴自動在視圖模型狀態下使用(!)。您不應該從您的視圖模型中引用您的視圖,因爲這會顛倒依賴關係並最終傷害到您(因爲它會妨礙重用性並鎖定應該具有實現細節的抽象功能)

如果您有像「活性的」,表示它在你的視圖模型與可觀察到的:

function SomeViewmodel() { 
    var self = this; 

    self.isActive = ko.observable(false); 
    self.toggleActive = function() { 
     self.isActive(!self.isActive()); 
    } 
} 

並經由css結合在視圖中引用它:

<div data-bind="click: toggleActive, css: {active: isActive}">click me</div> 

敲除處理的其餘部分。這樣抽象定義(「這個東西是主動的」)顯然與實現分離(「表示這個東西的元素具有某個CSS類,因爲它是活動的」)。如果您改變了主意,如何在視覺上呈現「主動」,則您需要修改的是視圖,因爲視圖模型不關心它。

你永遠不需要知道點擊元素(你也不需要jQuery來實現它)。

+0

你是對的,我很懶。我覺得它要更容易這樣,但我已經用CSS做它:結合如你所說,並保持神聖的視圖模型的方式,它應該是:) – mls3590712

+0

@mls它比約做錯事,做少講神聖正確的事。方便的是,在這裏做正確的事情實際上更容易。 – Tomalak

相關問題