私はC#環境から来て、そこにはINotifyPropertyChangedインターフェイスがあります。このプロパティ変更イベントにサブスクライブすると、送信者とプロパティ名が受信されます。この例では、送信者はViewModelです。私はKnockoutJSと似たものを持っていたい。私は購読し、ViewModelとPropertyNameパラメータを持つオブジェクトを含むハッシュテーブルに関数のインスタンスを格納しようとしました。 Observableの新しい値は、私がイベントを使用するために十分ではないためです。グローバルプロパティを変更する方法KnockoutJSでイベントハンドラを変更する
C#のINotifyPropertyChangedと同様の方法で動作するKOでコードを作成するにはどうすればよいですか?
これは私が何らかの努力をしてくれたことを示すために書きました。しかし、私はここで悲惨に失敗しています。ノックアウトdocsから
var propertyChangedHashTable = new Hashtable();
function PropertyChanged(newValue) {
console.log(this);
var changedEventParams = propertyChangedHashTable[this];
console.log(changedEventParams);
//gateway.propertyChanged(changedEventParams.viewModel, changedEventParams.propertyName, newValue);
};
function subscribePropertyChanged(viewModel, objectPath) {
if (typeof objectPath === "undefined" || objectPath == null) objectPath = "";
if (objectPath.length !== 0) objectPath += '.';
var observable = ko.observable("").toString();
for (var propertyName in viewModel) {
var viewModelName = viewModel.__proto__.constructor.name;
var localObjectPath = objectPath + viewModelName;
var property = viewModel[propertyName];
if (propertyName.indexOf("ViewModel") !== -1) {
subscribePropertyChanged(property, localObjectPath);
continue;
}
var isObservable = property.toString() === observable.toString();
if (!isObservable) continue;
var propertyChangedFunc = PropertyChanged;
propertyChangedHashTable.put(propertyChangedFunc, 'test');
property.subscribe(propertyChangedFunc);
}
}
function MainViewModel() {
var self = this;
self.isRecording = ko.observable(false);
self.dataDirectory = ko.observable("C:\\Temp\\Recordings");
self.toggleIsRecording = function() {
self.isRecording(!self.isRecording());
};
}
var viewModel = new MainViewModel();
subscribePropertyChanged(viewModel);