带有Rails的Backbone.js

我目前正在尝试Backbone.js以及一个Rails应用程序。 我的问题是,我不知道如何使用我的Rails应用程序实现Backbone控制器和视图。 我读过很多教程,但他们总是在backbone.js中只使用一个控制器。

例如,我在轨道中有两个控制器。

  • 活动控制器
  • 包含两个视图,一个谷歌地图和一个搜索栏。 谷歌地图插入骨干视图,搜索字段在HTML中,并通过骨干视图获得其功能。
  • 搜索字段应从我的导轨模型中获取数据并在地图内显示标记。
  • 另一个是

  • 用户控制器
  • 这里查看用户配置文件,我想添加一些Ajax功能,如更新值和其他东西
  • 在我的application.js中,我开始使用该应用程序

    var App = {
      Views: {},
      Controllers: {},
      Collections: {},
      init: function() {
          new App.Controllers.Activities();
          new App.Controllers.Users();
          Backbone.history.start();
      }
    };
    
    $(function() {
      App.init();
    });
    

    问题是,我不需要用户配置文件中的活动控制器和Rails活动控制器中的用户控制器。 我怎么能解决这个问题? 我应该尝试阅读JavaScript内的当前网址,然后决定使用哪个控制器? 或者我应该把JavaScript文件放到application.html.erb中,然后决定在哪里使用哪个控制器?

    或者这是使用backbone.js控制器的错误方法?

    我对backbone.js的结构感到困惑吗? 或者我以错误的方式使用控制器?

    另一个问题是,如何通过Backbone.js添加一些JavaScript,特别是jQuery功能? 例如,我想在用户点击字段时删除字段内的标签。 或者我想做一些标签功能,只需切换一些元素的可见性。 我应该为每个使用javascript的骨干视图创建元素吗? 或者这是超负荷?

    希望我让自己清楚,任何人都可以帮助,thx!


    为什么不利用Backbone提供的路由功能来决定调用哪种方法? 活动控制器将只包含用于活动的路由,用户控制器仅用于用户处理等等。 像这样,你可以像实例一样实例化控制器,路由将根据当前位置的哈希来决定发生了什么。

    如果你不能使用哈希链接(或者你的页面上没有这样的链接),我只需将我的视图容器命名为足够特定的名称,以便在需要时仅为当前视图添加事件。

    jQuery插件等属于视图IMO。 您的选项卡和输入提示切换也一样。

    更新

    在一般水平上(和我不一定会推荐做这种方式):如果你有两个方法:

    // should be only called for the 'Foo' controller
    function foo() {
      alert("FOO");
    };
    
    // should be only called for the 'Bar' controller
    function bar() {
      alert("BAR");
    };
    

    并且只想根据当前Rails控制器仅调用其中的一个,创建一个小帮手:

    例如在你*助手/ application_helper.rb *

    def body_class
      controller.controller_name
    end
    

    然后在布局文件(或标题部分)中调用此方法:

    <body class="<%= body_class %>">
    …
    

    并使用例如jQuery来“分割”你的JS执行:

    if ($('body').hasClass('foo')) {
      foo();
    } else if ($('body').hasClass('bar')) {
      bar();
    } 
    

    我个人使用jammit(来自骨干的同一作者)。 您可以按模块将样式表和JavaScript文件分组,并在不同的页面上使用它们。 所以你为你的活动视图创建一个模块,为你的用户视图创建一个模块,每个模块需要必要的JavaScript文件。 关于这件事的两件好事:

  • 您只有在页面上加载的页面上使用的代码
  • jammit为您压缩一切
  • 如果不创建单个页面的Web应用程序,您需要依靠#路线从一个控制器导航到另一个控制器。 在你的情况下,你有一个主导轨应用程序内的多个单页面应用程序。


    我是一个Backbone.js新手,所以请有人纠正我,如果我错了,但我认为你混淆了什么骨干控制器用于。

    Backbone.js控制器基本上由hashbang路由(类似于Rails路由)和这些路由调用的动作组成。 例如,如果您有一个导轨路线,它将在http://mysite.com/backbone_test上显示一个视图,并且您有以下主干路线:

    var MyController = Backbone.Controller.extend({
      routes: {
        "foo/:bar":            "myFirstFunction"
      },
      myFirstFunction: function(bar){
        console.log(bar);
      });
    

    那么如果你去http://mysite.com/backbone_test#foo/THIS-IS-AMAZING那么MyController.MyFirstFunction被执行,并且“THIS-IS-AMAZING”被登录到JS控制台中。

    除非您直接需要这种与hashbang相关的功能,例如通过url保存JavaScript应用程序的状态(例如:http://my.app.com/#key=value&key=value&ad-infinitum=真实)Id建议不要使用Backbone控制器。 您可以通过模型集合和视图获得所有的功能。

    一般来说,控制器和骨干的好处在于它的模块化和不同的部分可以独立使用。

    我想这个答案的总结是,如果你没有一个单一的页面JavaScript应用程序,不要使用Backbone控制器,而是依赖你的导轨控制器。

    链接地址: http://www.djcxy.com/p/49055.html

    上一篇: Backbone.js with Rails

    下一篇: How can I do Squashing in git