Backbone路由器、视图&模型合作
Backbone router, view & model cooperation
我有包含一些按钮的视图。当该视图被激活时,它应该采用一些 URL 参数(在我的例子中是站点 ID)并将其设置为按钮属性 "data-site_id"。应用程序中也有一个路由器。但我不知道如何以最好的方式实现它。到目前为止,我看到了 3 个假设的解决方案:
从 URL 哈希中提取站点 ID。 URL 就是这样构建的:
"sites/edit/:id(/:tab)": "editSite",
问题是——我可以在这里使用路由器本身吗(如果是的话怎么办?)或者不能,并且应该用普通的 JS 方式解析它?当然,router & view是两个不同的对象,位于不同的files/scopes.
- 保存模型中的site_id。但我不确定如何从路由器存储它。我想我可以创建一个模型实例,将其设置为路由器范围内的变量,然后像往常一样对待它,像这样:
(function(app, $, config, _) {
var Model = new app.modelName();
var Router = app.Router = Backbone.Router.extend({
routes: {
"": "start",
//....
"sites/edit/:id(/:tab)": "editSite",
//...
},
//....
editSite: function(id, tab){
Model.set('site_id', id);
}
//....
})(window.Application, jQuery, window.chatConfig, _);
之后我可以随时从模型中提取站点 ID
- 将数据-site_id 属性分配给路由器中的按钮。但这看起来不是最佳做法,对吧?
那么你有什么建议?
您建议的第二个解决方案最有意义,然后您可以实例化您的视图,将该模型传递给构造函数。
我有包含一些按钮的视图。当该视图被激活时,它应该采用一些 URL 参数(在我的例子中是站点 ID)并将其设置为按钮属性 "data-site_id"。应用程序中也有一个路由器。但我不知道如何以最好的方式实现它。到目前为止,我看到了 3 个假设的解决方案:
从 URL 哈希中提取站点 ID。 URL 就是这样构建的:
"sites/edit/:id(/:tab)": "editSite",
问题是——我可以在这里使用路由器本身吗(如果是的话怎么办?)或者不能,并且应该用普通的 JS 方式解析它?当然,router & view是两个不同的对象,位于不同的files/scopes.
- 保存模型中的site_id。但我不确定如何从路由器存储它。我想我可以创建一个模型实例,将其设置为路由器范围内的变量,然后像往常一样对待它,像这样:
(function(app, $, config, _) { var Model = new app.modelName(); var Router = app.Router = Backbone.Router.extend({ routes: { "": "start", //.... "sites/edit/:id(/:tab)": "editSite", //... }, //.... editSite: function(id, tab){ Model.set('site_id', id); } //.... })(window.Application, jQuery, window.chatConfig, _);
之后我可以随时从模型中提取站点 ID
- 将数据-site_id 属性分配给路由器中的按钮。但这看起来不是最佳做法,对吧?
那么你有什么建议?
您建议的第二个解决方案最有意义,然后您可以实例化您的视图,将该模型传递给构造函数。