sendAction()方法。访问控制器中的操作

时间:2013-11-25 13:55:13

标签: ember.js

我需要访问我的HomeController中的动作内定义的方法,但我一直得到一个未定义的。 我发现有这个为此做的sendAction()方法,但在阅读文档后,github问题和一些(只有一些)stackoverflow相关的主题,我放弃并决定了一个肮脏的方式。 但是,我仍然会理解使用它的正确方法。 代码如下:

    ArtRank.HomeController = Ember.ObjectController.extend({
    photoIndex: 0,

    actions: {
        nextPhoto: function() {    
            this.set('photoIndex', this.get('photoIndex') + 1);
            var items;

        },
        prevPhoto: function() {
            this.set('photoIndex', this.get('photoIndex') - 1);
        }
    },

    init: function() {
        var controller = this;
        this.set('photoTimer', setInterval(function(){
            Ember.run(function() {
                controller.nextPhoto();
            });
        }, 3000));
    }

});

我需要在init函数中访问nextPhoto()。但是nextPhoto()是内部动作所以它给了我一个未定义的。

1 个答案:

答案 0 :(得分:1)

只需使用controller.send(actionName, args ...)

观察:我不知道是否可以触发init方法内的动作,所以我使用startTimer: function(){}.on('init'),这个方法将在对象创建和设置后触发。

ArtRank.HomeController = Ember.ObjectController.extend({
    photoIndex: 0,

    actions: {
        nextPhoto: function() {    
            this.set('photoIndex', this.get('photoIndex') + 1);
            var items;

        },
        prevPhoto: function() {
            this.set('photoIndex', this.get('photoIndex') - 1);
        }
    },

    startTimer: function() {
        var controller = this;
        this.set('photoTimer', setInterval(function(){
            Ember.run(function() {
                controller.send('nextPhoto');
            });
        }, 3000));
    }.on('init')
});