1

当模型更改时,我会更新路由(它有一个包含应用程序当前状态的 url)。

当访问一个 url(或按下返回)时,我从路由更新模型。

这给我带来了循环逻辑问题,我无法理解。事情被无缘无故地改变了两次。

将所有内容都基于路线并使用它来更新模型是否正常?有两个型号正常吗?什么是正常的?

任何帮助或建议将不胜感激。谢谢

4

1 回答 1

2

我不建议您按照您的方式使用路由器。一般来说,路由动作不应该改变模型状态。一般来说,HTTP GET操作不应该有副作用。

路由器应该用于在单页应用程序的不同页面之间导航。模型更改应该直接从处理用户输入的视图代码中触发。假设您有一个 modelUser和 view UserView,该视图可以像这样工作:

var UserView = Backbone.View.extend({
    events: {
        "click #save", "save"
    },

    initialize: function(options) {
        this.model = options.model;
    },

    render: function() {
        //your render code here
    },

    save: function() {
        var fields = {
            name: this.$("#name").val();
            email: this.$("#email").val();
        };

        this.model.save(fields , {
            //after save go back to users page, or whatever
            success: function() { window.location.hash = "/users"; },
            error: this.displayError
        });
    }
});

Backbone 并不是真正的 MVC 框架,因此不应将路由器视为纯控制器。即使您这样做了,更改路由操作中的状态也将等同于更改 MVC 控制器GET端点中的状态 - 坏主意。

如果你想坚持纯 MVC 模式,你应该实现自己的控制器层,或者看看除了 Backbone 之外的另一个层。

于 2012-12-13T16:36:12.153 回答