当我们将一个函数订阅到多个属性时,有什么方法可以找到哪个属性正在调用订阅的函数?

代码示例。

var self = this;
$(document).ready(function(){

var myViewModel =
{
    FirstName : ko.observable("Bert"),
    LastName : ko.observable("pual")
};
myViewModel.FirstName.subscribe(self.notifyChange);

myViewModel.LastName.subscribe(self.notifyChange);

ko.applyBindings(myViewModel);
});
notifyChange = function ( newValue ) {// want to find which property(FirstName/LastName) is calling the function }

HTML
<body>
Enter your name:
<input id="source" data-bind="value: FirstName" />
<input id="Text1" data-bind="value: LastName" />

在这里,我为 FirstName 和 LastName 订阅了“notifyChange”功能。如果任何一个值发生变化,它会调用notifyChange函数,我想知道哪些属性更改使notifyChange函数调用?

最佳答案

您无法分辨谁实际调用了该函数。

一种选择是使用您的 notifyChange 函数,但在每种情况下都将其 bind 设置为适当的属性。现在,this 将被设置为 FirstNameLastName observable。执行 bind 确实会为该函数创建一个包装器,但至少您在 notifyChange 中的实际实现只会存在一次。

myViewModel.FirstName.subscribe(self.notifyChange.bind(myViewModel.FirstName));
myViewModel.LastName.subscribe(self.notifyChange.bind(myViewModel.LastName));

因此,this 中的 notifyChange 将是适当的可观察对象。

10-07 21:29