当我们将一个函数订阅到多个属性时,有什么方法可以找到哪个属性正在调用订阅的函数?
代码示例。
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
将被设置为 FirstName
或 LastName
observable。执行 bind
确实会为该函数创建一个包装器,但至少您在 notifyChange
中的实际实现只会存在一次。
myViewModel.FirstName.subscribe(self.notifyChange.bind(myViewModel.FirstName));
myViewModel.LastName.subscribe(self.notifyChange.bind(myViewModel.LastName));
因此,
this
中的 notifyChange
将是适当的可观察对象。