rails api的简单主干示例

时间:2012-09-28 05:32:13

标签: javascript ruby-on-rails api rest backbone.js

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

// Models
window.Entry = Backbone.Model.extend();
window.EntryCollection = Backbone.Collection.extend({
    model:Entry,
    url:"http://localhost:3000/entries"
});

// Views
window.EntryListView = Backbone.View.extend({
    tagName:'ul',
    initialize:function () {
        this.model.bind("reset", this.render, this);
    },
    render:function (eventName) {
        _.each(this.model.models, function (entry) {
            $(this.el).append("
  • " + entry.get("content") + "
  • "); }, this); return this; } }); // Router var AppRouter = Backbone.Router.extend({ routes:{ "":"list" }, list:function () { 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();

    2 个答案:

    答案 0 :(得分:0)

    您是否可以检查/条目是否返回'结果'节点? 也许你在Rails中忘记了ActiveRecord :: Base.include_root_in_json = false?

    答案 1 :(得分:0)

    在你的AppRouter代码中,你有这一行:

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

    但是,entryList是Collection而不是Model,所以你必须像这样定义它:

    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) {
    

    我不确定这是否就是一切,但这是我唯一能够立即看到的事情。

    编辑:添加add'l更改为this.model参考