0

バインディングの目的でノックアウトを使用しており、共有モジュールに取り組んでいます。基本的に、いくつかのリンクがあり、それらはすべて、基本的に異なる値で同じ関数を呼び出しています。たとえば、Facebookをクリックすると、値が「Facebook」のすべてのサービスが表示され、Twitterをクリックすると、値が「Twitter」の関数が呼び出されます。しかし、基本的に同じ関数を呼び出します。data-bind = "click:Share"のようなものしかできないので、HTMlからパラメーターを指定する方法はありません。ここでは、ここでパラメーターを指定できないことがわかります。

これで、jsファイルにko.observableを作成できます。これは、この関数が引数として取ります...しかし、さまざまなリンクがクリックされたときに、htmlクリックイベントからそのobservableに書き込む方法が必要です。それを行う方法について何かアイデアはありますか?

4

1 に答える 1

1

Knockoutは、現在のコンテキストをデータバインディングで使用される関数に渡します。これは、あなたがclick: shareそれを呼び出すと、あなたがバインドしたサービスを渡すことを意味します。これを示すフィドルがありますが、かなり基本的なものなので、ここにコードを入れます。

より複雑なバインディングの場合、オブジェクトには、関数で使用するだけでなく、nameの代わりに使用できるプロパティが含まれている可能性があります。$datashare()

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));​
于 2012-06-20T19:44:08.920 に答える