【发布时间】:2014-04-23 05:32:03
【问题描述】:
我已经完成了 CodeSchool 的 Backbone.js 剖析课程,我尝试将它与 Rails 一起使用。
但我不知道为什么它不起作用....
我的 Backbone.js 代码:
var PostModel = Backbone.Model.extend({
defaults: {
id: 0,
title: "",
content: ""
}
});
var PostList = Backbone.Collection.extend({
url: '/posts',
model: PostModel
});
var PostView = Backbone.View.extend({
tagName: 'p',
template: _.template(
'<h1>' + '<%= title %>' + '</h1>' + '<br />' +
'<%= content %>'
),
render: function(){
this.$el.html(this.template(this.model.attributes));
}
});
var PostIndexView = Backbone.View.extend({
addOne: function(post){
var postView = new PostView({model: post});
postView.render();
this.$el.append(postView.el);
},
render: function(){
this.collection.forEach(this.addOne, this);
}
});
我有一个 Pages#Controller(它只有一个 index 方法)和一个 Posts#Controller。
我将 pages#index 指定为根路径。 pages#index 视图喜欢以下内容:
<h1 id="heading">Index Posts</h1>
<div id="posts"></div>
<script type="text/javascript" charset="utf-8">
var postModel = new PostModel();
var postList = new PostList({model: postModel});
postList.fetch();
var postIndexView = new PostIndexView({collection: postList});
postIndexView.render();
$('#posts').html(postIndexView.el);
</script>
Posts#Index 喜欢这个:
def index
@posts = Post.all
render json: @posts
end
(一个post Object有两个属性,一个是title,一个是content。)
我看到 /posts 路径的响应是这样的:
[{"id":3,"title":"hi","content":"hi","created_at":"2014-04-18T03:50:51.444Z","updated_at":"2014-04-18T03:50:51.444Z"},{"id":4,"title":"post2","content":"post2\r\n","created_at":"2014-04-18T04:07:20.550Z","updated_at":"2014-04-18T04:07:20.550Z"}]
但是每当我使用浏览器访问 root_url 时,什么都没有发生。
谁能帮帮我...谢谢...
更新:
我错过了一件没有提到的事情,我看到了以下错误:
在 2014-04-19 05:37:52 +0800 开始为 127.0.0.1 获取“/assets/underscore-min.map” ActionController::RoutingError (没有路由匹配 [GET] "/assets/underscore-min.map"):
在 2014-04-19 05:37:52 +0800 开始 GET "/assets/backbone-min.map" for 127.0.0.1
ActionController::RoutingError (没有路由匹配 [GET] "/assets/backbone-min.map")
【问题讨论】:
-
Backbone 之前是否包含了 jQuery 和 Underscore?
-
是因为
postList.fetch()是一个AJAX 调用,而您没有在postList上收听任何事件吗?尝试postList.fetch({ reset: true }),然后在渲染之前监听来自postList的'reset'事件。 -
我更新了内容以包含我看到的错误消息。为什么它会显示此错误?
-
不要担心源地图的 404。你的控制器被调用了吗?它返回正确的东西吗?您是否考虑了 Backbone
fetch调用的异步性质?