Javascript viewmodel数据更改时,Extjs绑定的html不更新
我有一个视图,它将html配置绑定到我的viewmodel中的数据 景色 最初呈现视图时,绑定的数据会按预期填充到HTML配置中 然后,我在viewcontroller中创建了一个方法来增加日期 视图控制器 我确信这会导致facepalm时刻,但我希望当我更新viewmodel中的Javascript viewmodel数据更改时,Extjs绑定的html不更新,javascript,extjs,mvvm,data-binding,Javascript,Extjs,Mvvm,Data Binding,我有一个视图,它将html配置绑定到我的viewmodel中的数据 景色 最初呈现视图时,绑定的数据会按预期填充到HTML配置中 然后,我在viewcontroller中创建了一个方法来增加日期 视图控制器 我确信这会导致facepalm时刻,但我希望当我更新viewmodel中的selectedDate数据时,它会触发html配置的两个绑定部分进行更新,但事实并非如此 viewmodel数据肯定正在更新。如果在第二次单击增量按钮时检查viewcontroller中的dateChange变量,您
selectedDate
数据时,它会触发html配置的两个绑定部分进行更新,但事实并非如此
viewmodel数据肯定正在更新。如果在第二次单击增量按钮时检查viewcontroller中的dateChange
变量,您将看到日期确实增加了
在更新绑定配置时,我是否缺少一些东西
我有这个。更新:您需要@user2767141编写的深度绑定,而不是我建议的丑陋的解决方法
一旦我换了台词:
vm.set('selectedDate', dateChange);
致:
它可以工作。实际上,你需要深度绑定 参考: 有时,如果对象的任何属性发生更改,可能需要通知您
太棒了,谢谢。为什么创建新的日期实例会改变这一点?
dateChange
不是已经是一个日期实例了吗?是的,但是您现在分配一个新实例,这样绑定机制就可以识别日期已经更改了。我不确定这是不是最好的解决方案:-)明白了。即使这不是最好的解决方案,但它仍然有效,这正是我所需要的:)谢谢你的帮助!一般来说,这是一个糟糕的解决方案:正确的解决方案是在另一个答案中所评论的深度bingind。只有当数据
中的变量发生更改时(观察者模式),绑定才会更新。如果要在子字段更新时更新,则必须使用deep:true
Ext.define('MyApp.MyViewModel',{
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.myviewmodel',
data:{
selectedDate: new Date()
},
formulas:{
currentMonth: function (get){
var monthNames = ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"];
var monthNumber = get('selectedDate').getMonth();
return monthNames[monthNumber];
}
}
});
Ext.define('MyApp.MyViewController',{
extend: 'Ext.app.ViewController',
alias: 'controller.myviewcontroller',
onIncrementMonth: function (){
var vm = this.getViewModel();
var dateChange = vm.get('selectedDate');
dateChange.setMonth(dateChange.getMonth() + 1);
vm.set('selectedDate', dateChange);
}
});
vm.set('selectedDate', dateChange);
vm.set('selectedDate', new Date(dateChange));
viewModel.bind({
bindTo: '{someObject}',
deep: true
},
function (someObject) {
// called when reference changes or *any* property changes
});