Backbonejs - 模型中的更改是否应该导致路径更改,或者所有更改是否应首先通过路径?

时间:2012-12-13 15:18:54

标签: backbone.js

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

当访问网址(或按下后退)时,我会从路线更新模型。

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

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

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

1 个答案:

答案 0 :(得分:2)

我不会像你那样建议使用路由器。通常,路由操作不应更改模型状态。通常,HTTP GET操作不应有副作用。

路由器应该用于单页应用程序的不同页面之间的导航。应直接从处理用户输入的视图代码触发模型更改。我们假设您有一个模型User,并查看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之外的另一层。