0

jqueryを使用して何かを変更するときに、サブスクライブをアクティブ化する方法はありますか?

例えば:

var MyModel = function (){
 var self = this;
 this.ImageUrl= ko.observable("Image.jgp");
}

var Model = new MyModel (); 
ko.applyBindings(Model);
Model.ImageUrl.subscribe(function (NewValue)
{
console.log(NewValue);
})

<img data-bind:"attr{src: ImageUrl}" id ="image1" src = "" alt= "new image"/>

そして私はsrcを変更するためにjqueryを使用しています:

$("#button1").click(function(){
$("#image1").attr("src","image2.jpg");
})

これはちょっとした例ですが、これが最良の選択肢かどうかはわかりません。

4

1 に答える 1

1

attrバインディングは一方向のバインディングであるため、要素への変更には反応しません(イベントを処理しません)。

Knockoutには、呼び出される2つのヘルパー関数が含まれko.dataForておりko.contextFor、DOM要素を指定して現在のデータ/コンテキストを提供できます。これが私たちが持っているドキュメントです:http://knockoutjs.com/documentation/unobtrusive-event-handling.html

したがって、基本的に、jQueryを介してイベントハンドラーをアタッチする場合は、を使用してデータを取得し、オブザーバブルを直接ko.dataFor更新する必要があります。ImageUrl

サンプルは次のとおりです:http://jsfiddle.net/rniemeyer/gbruu/

于 2012-08-14T17:35:40.333 に答える