Backbone.js与Rails

23t*_*tux 7 ruby-on-rails backbone.js

我正在尝试Backbone.js和rails应用程序.我的问题是,我不知道如何使用我的rails应用程序实现Backbone控制器和视图.我已经阅读了很多教程,但他们总是在backbone.js中只使用一个控制器.

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

  • 活动控制员
    • 包括两个视图,谷歌地图和搜索字段.谷歌地图插入骨干视图,搜索域是HTML格式,并通过骨干视图获取其功能.
    • 搜索字段应从我的rails模型中获取数据并在地图内显示标记.

而另一个是

  • 用户控制器
    • 在这里查看用户配置文件,我想添加一些ajax功能,如更新值和其他东西

在我的application.js中,我使用启动应用程序

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

$(function() {
  App.init();
});
Run Code Online (Sandbox Code Playgroud)

问题是,我不需要我的用户配置文件中的活动控制器和Rails活动控制器中的用户控制器.我该怎么解决这个问题?我应该尝试在javascript中读取当前的URL,然后决定使用哪个控制器吗?或者我应该将JavaScript文件放入application.html.erb然后决定应该使用哪个控制器?

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

我对backbone.js的结构有点错误吗?或者我是以错误的方式使用控制器?

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

希望我明确表示,任何人都可以提供帮助,谢谢!

pol*_*lau 2

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

\n\n

如果您无法使用带有哈希值的链接(或者您的页面上没有此类链接),我只需将视图容器命名得足够具体,以便在需要时仅为当前视图附加事件。

\n\n

IMO 中的 jQuery 插件等属于视图。您的选项卡和输入提示切换也是如此。

\n\n

更新

\n\n

一般而言(我不一定建议这样做):如果您有两种方法:

\n\n
// should be only called for the \'Foo\' controller\nfunction foo() {\n  alert("FOO");\n};\n\n// should be only called for the \'Bar\' controller\nfunction bar() {\n  alert("BAR");\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

例如在你*helpers/application_helper.rb*

\n\n
def body_class\n  controller.controller_name\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
<body class="<%= body_class %>">\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
if ($(\'body\').hasClass(\'foo\')) {\n  foo();\n} else if ($(\'body\').hasClass(\'bar\')) {\n  bar();\n} \n
Run Code Online (Sandbox Code Playgroud)\n

  • Backbone.Collection = Rails 控制器(以一种轻松的方式)。骨干控制器用于控制客户端的流量。一个骨干控制器实际上可以根据加载的数据作用于许多不同的轨道控制器。我认为在您的情况下,您不想构建单页面应用程序,而是让骨干处理页面内的动态行为。 (3认同)