特定の月に関するいくつかの値を計算するために、knockout.js と moment.js を使用しています。次のコードは意図したとおりに機能します。
var calendarViewModel = {
selectedMonth: ko.observable(moment().format("M")),
daysInMonth: ko.observable(moment().month(3).daysInMonth())
};
ko.applyBindings(calendarViewModel);
返される値は、selectedMonth の場合は「4」、daysInMonth の場合は「30」です。
しかし、私がやりたいことは、selectedMonth の現在の値 (変更される) に基づいて daysInMonth の値を計算することです。私が思いついた最高のコードはこれでした:
var calendarViewModel = {
selectedMonth: ko.observable(moment().format("M")),
daysInMonth: ko.observable(moment().month(calendarViewModel.selectedMonth() - 1).daysInMonth())
};
ko.applyBindings(calendarViewModel);
Uncaught TypeError: Cannot read property 'selectedMonth' of undefined
コンソールに入ります。私が理解に苦しんでいるのは、このコンテキストで selectedMonth を適切に参照する方法です。viewModel の外にある他のジェネリック変数で selectedMonth を作成すると、私が行っていることはすべて正常に機能します。
これは、JavaScript オブジェクトに関する私の (不十分な) 理解に関係していて、ライブラリ自体とは何の関係もないことは確かです。