我试图点击一个元素并用一个参数调用一个函数,同时跟踪单击了哪个元素。 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 第二个参数:2 第三个参数:3 第4个参数:[对象]其中第4个参数似乎是整个视图模型。
如何在传入参数的同时访问$ event.target的点击绑定?
答案 0 :(得分:2)
来自意见:
我想
basically do $(this).toggleClass('active')
点击,除了用实际数据参数做事 我寄来的。但是我无法访问$(this)
你不应该有办法做到这一点。 Knockout是关于将视图与viewmodel分离,使视图在viewmodel状态下自动自动(!)。你永远不应该在你的viewmodel中引用你的视图,因为这会扭转依赖并最终伤害你(因为它阻碍了可重用性并锁定了应该是抽象功能的实现细节)
如果你有一个类似" active"的状态,请在你的viewmodel中用一个observable表示它:
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>
Knockout处理剩下的事情。这样抽象定义(&#34;这个东西是活动的&#34;)明显地与实现分开(&#34;表示这个东西的元素具有某个CSS类,因为它是活动的&#34;)。你是否应该改变主意&#34;活跃&#34;在视觉上表示,您需要修改的只是视图,因为视图模型不关心它。
你永远不需要知道被点击的元素(你也不需要jQuery来实现它)。