Knockout:如何访问subscribe函数中的元素

时间:2014-06-09 16:56:46

标签: knockout.js

我试图从subscribe回调中获取绑定元素。我一直试图找到一些可以指向正确方向但却找不到任何东西的东西。你能让我知道如何完成以下内容:

var ViewModel = {
    var self = this;
    self.Id = ko.observable();
    self.Id.subscribe(function(newvalue){
        //I want to get the element that the Id is bound to
        //How can I do that?
    });
}

感谢。

3 个答案:

答案 0 :(得分:1)

嗯,你不能这样,但是你可以在change事件上获得元素:

HTML:

<input data-bind="value: foo, event: { change: helloElement.bind($data, foo, $element) }" />

JS:

var model = {
    foo: ko.observable(),
    helloElement: function (value, element) {
        console.log("Hi! I have the value " + value() + " and I live in the element: ", element);
    }
};

ko.applyBindings(model);

Working fiddle

答案 1 :(得分:0)

我最近遇到了类似的问题,幸运的是得到了一位才华横溢的人的帮助。

代码

for (var row in obj){
    if(typeof(obj[row]) == "function") {
        obj[row].subscribe(function(r) {
            return function(newValue) {
                var _fieldName = r;
                console.log(_fieldName, newValue);
                // Do your stuff
            };
        }(row));
    }
}

解释

订阅功能需要一个功能,此功能的第一个参数是值(新/旧)。因此,不是编写内联函数,而是返回相同签名的函数,并将值绑定到此外部函数。

希望它有所帮助。

答案 2 :(得分:0)

你需要绑定什么语境&#34;这个&#34;会有你的订阅方法。像这样:

明确绑定:

 this.property.subscribe(function(newValue) {
                               this.something(newValue);
                       }.bind(this));

或者你可以这样做:

this.property.subscribe(function(newValue) {
                           this.something(newValue);
                   }, this);

两种方法都有相同的结果。