0

所以我使用 rails-api gem 创建了一个 rails api。我将我的主干代码放在默认的 public/index.html 中。我尝试了 json 链接并返回 json,它只是一个名为“entry”的模型,带有一个名为“content”的字段以及一些默认的 rails 字段。但是主干代码不起作用,您能发现这有什么问题吗?我只是想从返回的 json 中显示记录列表。

// 楷模
window.Entry = Backbone.Model.extend();
window.EntryCollection = Backbone.Collection.extend({
    型号:入口,
    网址:“http://localhost:3000/entries”
});

// 视图
window.EntryListView = Backbone.View.extend({
    标签名:'ul',
    初始化:函数(){
        this.model.bind("reset", this.render, this);
    },
    渲染:函数(事件名称){
        _.each(this.model.models, function (entry) {
            $(this.el).append("
  • " + entry.get("内容") + "
  • "); }, 这个); 返回这个; } }); // 路由器 var AppRouter = Backbone.Router.extend({ 路线:{ ““:“列表” }, 列表:函数(){ this.entryList = new EntryCollection(); this.entryListView = new EntryListView({model:this.entryList}); this.entryList.fetch(); $('#entries').html(this.entryListView.render().el); } }); var app = new AppRouter(); Backbone.history.start();
    4

    2 回答 2

    0

    您能否检查 /entries 是否返回“结果”节点?也许你忘了 ActiveRecord::Base.include_root_in_json = false 在 Rails 中?

    于 2012-09-28T11:10:16.850 回答
    0

    在您的 AppRouter 代码中,您有以下行:

    this.entryListView = new EntryListView({model:this.entryList});
    

    然而,entryList 是一个集合,而不是一个模型,所以你必须像这样定义它:

    this.entryListView = new EntryListView({collection:this.entryList});
    

    同样,在您的 EntryListView 代码中,您有:

    this.model.bind("reset", this.render, this);
    
    ...
    
    _.each(this.model.models, function (entry) {
    

    应该变成:

    this.collection.bind("reset", this.render, this);
    
    ...
    
    _.each(this.collection.models, function (entry) {
    

    我不确定这是否就是一切,但这是唯一对我来说立即显而易见的事情。

    编辑:添加了对 this.model 参考的添加更改

    于 2012-09-28T13:37:58.373 回答