javascript - Backbone 路由器、 View 和模型协作

标签 javascript backbone.js view model url-routing

我有包含一些按钮的 View 。当该 View 被激活时,它应该采用一些 URL 参数(在我的例子中是站点 id)并将其设置为按钮属性“data-site_id”。应用程序中也有一个路由器。但我不知道如何以最好的方式实现它。到目前为止,我看到了 3 个假设的解决方案:

  1. 从 URL 哈希中提取站点 ID。 URL 是通过这样的模式构建的:

    "sites/edit/:id(/:tab)": "editSite",

问题是——我可以在这里使用路由器本身(如果是的话怎么办?)或者不能,并且应该用常见的 JS 方式解析它?当然,路由器和 View 是两个不同的对象,位于不同的文件/范围中。

  • 将 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

  • 将 data-site_id 属性分配给来自路由器的按钮。但这看起来并不是最佳实践,对吧?
  • 那么你的建议是什么?

    最佳答案

    您建议的第二个解决方案最有意义,然后您可以实例化您的 View ,将该模型传递给构造函数。

    参见http://backbonejs.org/#View-constructor

    关于javascript - Backbone 路由器、 View 和模型协作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33733644/

    相关文章:

    javascript - 使用 Javascript 编辑内容管理系统创建的 HTML 元素

    javascript - PrimeFaces p :blockUI blocking a certain component dynamically (on JSF EL condition)?

    javascript - 单击移动设备上的按钮调用电话号码

    javascript - 主干事件不是由按钮触发的

    android - 指定的 child 在膨胀 View 上已经有父错误

    javascript - 在 map 中显示 KML 文件

    javascript - 对象未从 Backbone 中的集合中删除

    javascript - 如何阻止 Backbone.js 发送 OPTIONS 请求?

    ios - 在页面之间隐藏时移动到 ScrollView 中的特定页面 - iOS

    mysql - 使sql View 可编辑