当模型更改时,我会更新路由(它有一个包含应用程序当前状态的 url)。
当访问一个 url(或按下返回)时,我从路由更新模型。
这给我带来了循环逻辑问题,我无法理解。事情被无缘无故地改变了两次。
将所有内容都基于路线并使用它来更新模型是否正常?有两个型号正常吗?什么是正常的?
任何帮助或建议将不胜感激。谢谢
当模型更改时,我会更新路由(它有一个包含应用程序当前状态的 url)。
当访问一个 url(或按下返回)时,我从路由更新模型。
这给我带来了循环逻辑问题,我无法理解。事情被无缘无故地改变了两次。
将所有内容都基于路线并使用它来更新模型是否正常?有两个型号正常吗?什么是正常的?
任何帮助或建议将不胜感激。谢谢
我不建议您按照您的方式使用路由器。一般来说,路由动作不应该改变模型状态。一般来说,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 之外的另一个层。