带有Rails的Backbone.js
我目前正在尝试Backbone.js以及一个Rails应用程序。 我的问题是,我不知道如何使用我的Rails应用程序实现Backbone控制器和视图。 我读过很多教程,但他们总是在backbone.js中只使用一个控制器。
例如,我在轨道中有两个控制器。
另一个是
在我的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文件。 关于这件事的两件好事:
如果不创建单个页面的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