У меня есть большой нокаут ViewModel которого это является JSON представление:Подписаться на изменения в промежуточных объектов в knockoutjs ViewModel
...
existingPlans: {
startDate: "2014-11-01",
endDate: "2017-03-01",
plans: [
{
"customTitle": "plan 1 name",
"monthlyPayments": [ 15000, 15000, 15000, 15000, 15000, 15000 ],
"futureBalance": [ 90000, 75000, 60000, 45000, 30000, 15000 ]
},
{
"customTitle": "plan 2 name",
"monthlyPayments": [ 7000, 7000, 7000, 7000 ],
"futureBalance": [ 28000, 21000, 14000, 7000 ]
}
]
}
...
StartDate и ENDDATE являются наблюдаемыми и планы является observableArray. Что бы я хотел сделать, это создать одну привязку, которая срабатывает, когда любой из этих трех наблюдаемых изменяется так на уровне «existingPlans».
Я мог бы сделать вычисленное поле, которое зависит от всех трех, но разве нет более простого способа сделать это?
Что-то вроде примера ниже не работает, так как existingPlans сама не может быть наблюдаемым (правильно?)
viewModel.existingPlans.subscribe(function(newValue) {
// do stuff with newValue.startDate(), etc
})
Хорошо, так что в любом случае мне придется проходить через наблюдаемых детей? Привязка к чему-то более высокому дереву JSON не является вариантом? – koenpeters
Возможно, я неправильно понял ваш вопрос. Если сущность ExistingPlans существует в родительской модели просмотра, вы можете подписаться на свойства аналогичным образом, например, 'this.existinPlans.startDate.subscribe (this.handleChange, this)' и вместо этого добавить метод handleChange в родительскую модель. – lagerone
Вы не можете просто наблюдать за корневым объектом, потому что нокаут наблюдает за изменениями ссылок, поэтому, даже если вы изменяете дочерние объекты, ссылка остается прежней, поэтому вам нужно добавить подписчиков на все дочерние элементы, как указано выше – Luis