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"/>

我正在使用 jquery 来更改 src:

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

这是一个小例子,我不确定这是否是最佳选择。

4

1 回答 1

1

attr绑定是一种单向绑定,因此它不会对元素的更改做出反应(不处理任何事件)。

Knockout 确实包含两个调用的辅助函数ko.dataForko.contextFor它们可以在给定 DOM 元素的情况下为您提供当前数据/上下文。以下是我们拥有的文档:http: //knockoutjs.com/documentation/unobtrusive-event-handling.html

所以,基本上,如果你想通过 jQuery 附加你的事件处理程序,那么你会想用它ko.dataFor来获取你的数据,然后ImageUrl直接更新你的 observable。

这是一个示例:http: //jsfiddle.net/rniemeyer/gbruu/

于 2012-08-14T17:35:40.333 回答