如何在事件上写入ko.observable?

时间:2012-06-20 19:18:30

标签: javascript knockout.js knockout-2.0

我正在使用敲出来进行绑定,我正在开发一个共享模块。基本上,有几个链接,它们基本上只是用不同的值调用相同的函数。例如,当您点击Facebook然后所有具有值“Facebook”的服务以及当您点击Twitter时,然后使用值“Twitter”调用该函数。但基本上调用相同的功能。既然没有办法从HTMl中指定参数,因为我能做的就像data-bind =“click:Share”。在这里,我们可以看到我不能在这里指定任何参数。

现在我可以在我的js文件中创建一个ko.observable,这个函数将作为一个参数......但是当我点击不同的链接时,我需要一种方法来编写来自html click事件的observable。关于如何做的任何想法?

1 个答案:

答案 0 :(得分:1)

Knockout将当前上下文传递给数据绑定中使用的任何函数。这意味着如果您致电click: share,它将传递您已绑定的服务。 Here is a fiddle demonstrating this,但我会在这里输入代码,因为它很基本。

对于更复杂的绑定,您的对象可能会有name属性,您可以使用该属性代替$data,以及在share()函数中使用。

HTML:

<ul data-bind="foreach: services">
    <li data-bind="text: $data, click: $parent.share" />
</ul>​

使用Javascript:

data = [
"Facebook",
"Twitter",
"Flickr",
"SomeOtherWeb2.0 Service"
];

var ViewModel = function(data) {
    this.services = ko.observableArray(data);
    this.share = function(service){
        alert("You Clicked on: " + service);
    };

};

ko.applyBindings(new ViewModel(data));​