从内部超时设置ViewModel数据值不会更新View

时间:2015-05-15 09:09:57

标签: extjs extjs5

我需要从ViewModel回调函数中更新我的setTimeout数据,但它不起作用。看起来我遇到的问题类似于当我需要在Angular之外的Angular中更新数据值然后需要调用$scope.apply()时发生的问题,但在ExtJS'方式。

以下是代码:

Ext.define('Web.view.taskbar.clock.ClockController', {
    extend: 'Ext.app.ViewController',

    alias: 'controller.taskbar-clock',

    init: function() {
        var me = this;

        // this works
        var time = new Date();
        me.getViewModel().data.time = time.getHours() + ':' + time.getMinutes() + ':' + time.getSeconds(); 

        // this doesn't work
        var timer = function() {
            setTimeout(function() {
                var time = new Date();
                me.getViewModel().data.time = time.getHours() + ':' + time.getMinutes() + ':' + time.getSeconds(); 
                timer();
            }, 1000);
        };
        timer();
    }
});

修改 更新了工作代码

Ext.define('Web.view.taskbar.clock.ClockController', {
    extend: 'Ext.app.ViewController',

    alias: 'controller.taskbar-clock',

    init: function() {
        var vm = this.getViewModel();

        var timer = function() {
            setTimeout(function() {
                var time = new Date();
                vm.set('time', time.getHours() + ':' + time.getMinutes() + ':' + time.getSeconds()); 
                timer();
            }, 1000);
        }
        timer();
    }
});

1 个答案:

答案 0 :(得分:3)

您需要调用setter方法:link

vm.set('time', 'x');