0

モデルの URL を使用して、バックボーン コレクションのサブセットを取得しようとしています。次の場所にある「ネストされたコレクション」のチュートリアルに似ています。

http://liquidmedia.org/blog/2011/01/backbone-js-part-1/

これにはデータ API、モデル、コレクション、ビューが必要なので、作成しようとしているものの完全なコードを含めました。

コード (Node/Mongoose/Express/Rest 内) : https://github.com/1manStartup/Backbone-URLRoot

ライブ例 (私の ec2): http://54.251.104.185/ 私の問題は、ビューのレンダリングとモデル データのフェッチのどこかにあると思います。

私がやろうとしていること:犬に固有のすべての記事をレンダリングします。ルートは: /api/makearticle/:id

NodeJs を使用しない場合、私の JSON Api は次のようになります。

{
    "articlename": "feed chocolate",
    "_dog": {
      "name": "pitbull",
      "_id": "51d0b9ad6fd59c5059000002"
    },
    "_id": "51d0c22a6fd59c5059000007",
    "__v": 0
  },
  {
    "articlename": "took to vet",
    "_dog": {
      "name": "chihuaha",
      "_id": "51d0b9af6fd59c5059000003"
    },
    "_id": "51d0c22e6fd59c5059000008",
    "__v": 0
  },

ここに私のモデルとコレクションがあります: https://github.com/1manStartup/Backbone-URLRootにある残りのバックボーン コード

https://github.com/1manStartup/Backbone-URLRoot/blob/master/public/javascripts/demo-routerurl.js

Dog = Backbone.Model.extend({
  idAttribute: '_id',
  urlRoot:'/api/makedog' ,
      initialize:function () {
        this.dogs = new Dogs();
        this.dogs.url = this.urlRoot + "/" + this.id ;
    }   
});

Dogs = Backbone.Collection.extend({
    model: Dog,
    url: '/api/makedog' 
});

Article = Backbone.Model.extend({
  idAttribute: '_id',
  urlRoot:'/api/makearticle' ,
      initialize:function () {
        this.merr = new Articles;
        this.merr.url = this.urlRoot + "/" + this.id ;
    } 
});

数日間これに取り組んでいるのを助けてください。ありがとう。

4

1 に答える 1

1

あなたの API は RESTful ではないようです。そのため、必要以上にトラブルを引き起こしている可能性があります。Backbone はデフォルトで RESTful API を想定しています。

いずれにせよ、次のようなことをする必要があります

var Article = Backbone.Model.extend({
  idAttribute: '_id'
});

var ArticleCollection = Backbone.Collection.extend({
  model: Article
});

var Dog = Backbone.Model.extend({
  idAttribute: '_id',
  initialize:function () {
    this.articles = new ArticleCollection({
      url: "api/dogs/" + this.get('id');
    });
  }   
});

次に、次のことができます(例):

var doggy = new Dog({id: 51d0b9ad6fd59c5059000002});
doggy.articles.fetch();
var articlesForDoggy = doggy.articles;

サイド ノードとして、新しい犬モデル インスタンスをインスタンス化するたびに、新しい犬のコレクションを作成するのはなぜですか?

また、注意してください:API設計を真剣に見直します。モデルの作成に別のルートを使用している場合 (これは「make...」ルートで示されているようです)、バックボーンの永続化レイヤーがモデルで動作するようにするには、大量のコードを作成する必要があります。 API。

さらに、この API は実際には規則に従っていません:api/dogs/XXX記事のリストを返すべきではありません: id を持つ犬のインスタンスを返す必要がありますXXX。のような URL を使用するapi/dogs/XXX/articlesと、犬に関連付けられた記事のリストをより適切に表示できます。

親切なアドバイス: 上記のコードで目的を達成できるはずですが、API の設計方法を再考する必要があります。Backbone で非 RESTful API を使用し、非標準の命名規則を使用すると、基本的に、プロジェクトで苦痛の世界に入ることが保証されます。

于 2013-07-01T19:02:14.733 に答える