4

我正在尝试探索 Backbone.StateManager 但在这方面找不到太多材料。我已经阅读了文档,但没有使用它的简单示例。

我做了一个这样的例子

(function($) {

    var UserInputView  = Backbone.View.extend({
        states: {
            foo: {
                enter: function () {
                    alert('hi');
                    return console.log('enter bar');
                },
                exit: function () {
                    alert('hi');
                    return console.log('exit foo');
                },
                transitions: {
                    transitions: {
                        'onBeforeExitTo:anotherState': function () {
                            alert('hi');
                        },
                        'onExitTo:anotherState': function () {
                            alert('hi');
                        },
                        'onBeforeEnterFrom:anotherState': function () {
                            alert('hi');
                        },
                        'onEnterFrom:anotherState': function () {
                            alert('hi');
                        }
                    }
                }
            },
            bar: {
                enter: function () {
                    alert('hi');
                    return console.log('enter bar');
                },
                exit: function () {
                    alert('hi');
                    return console.log('exit bar');
                },

            }
        },
        initialize: function () {
            var statemanager;

            alert('intialized');
            console.log(this.states);
            statemanager = Backbone.StateManager.addStateManager(this.states);

            return statemanager;
        },
        render: function () {

            alert('render');
        }
    });
    var user = new UserInputView();

})(jQuery);

在所有这些代码中,只有初始化功能起作用。其余代码不起作用。请指导

4

1 回答 1

1

基本上,您的代码错过了状态更改和Backbone.StateManager.addStateManager. 如文档中所述,将Backbone.StateManager 与对象一起使用

StateManager 提供了一种简单的方法,可以轻松地将 StateManager 添加到任何对象。StateManager.addStateManager接受一个目标对象和一组可选的选项,读取目标上定义的任何状态,并创建一个新的 StateManager。它还在 target 上设置了许多方法,包括triggerStategetCurrentState和对 StateManager 的引用target.stateManager

这意味着目标Backbone.StateManager.addStateManager应该是您的对象实例,并且您可以开始更改状态model.triggerState。例如 :

var UserInputView  = Backbone.View.extend({
    states: {
        // your states
    },
    initialize: function () {
        var statemanager;
        statemanager = Backbone.StateManager.addStateManager(this);
    }
});

var user = new UserInputView();
user.triggerState('foo');

基于您的代码的演示,用于可视化一些状态操作

于 2012-12-19T11:49:28.573 回答