2

私のフロントエンドはバックボーンで、フロントエンドは Phil Sturgeon の REST Controller を使用した codeigniter です。

1 つのモデル: Publisher と 1 つのコレクション: Publishers があります。

App.Collections.Publishers = Backbone.Collection.extend({
    model: App.Models.Publisher,
    url: '/restpublisher'
});

私の RestPublisher コントローラーには次のものがあります。

 function index_post(){
    $this->response('in pulisher_post');

}

function index_delete(){
    $this->response('in pulisher_delete');

}

function index_put(){
    $this->response('in pulisher_put');
}

問題は this.model.save(); にあります。起動される URL は次のとおりです: http://pubhub.local/restpublisher/1111ここで、1111 は ID です。

問題は、404 を取得することです。http://pubhub.local/restpublisher/への put リクエストをシミュレートするだけで、すべて正常に動作し、request->put() からパラメーターを取得できると思います。

この問題を解決する方法はありますか?

質問 2: アクションの名前を index で始める理由を誰か説明してもらえますか? コレクションの保存時にデータを取得する action: publishers_post を記述できないのはなぜですか?

どうもありがとう!ロイ

4

1 に答える 1

1

2 番目の質問から始めましょう。解析が簡単だと思いますし、定型文になるだけなので、なぜ index_ を使用しないのでしょうか?

さて、興味深い部分を続けます。コレクション内のモデルを操作する場合、Backbone はデフォルトの動作として、コレクションの URL を使用してモデルのデフォルト URL を作成します ( collection.url/model.id )。ただし、モデルの URL: に値を設定することで、これをオーバーライドできますurl: '/restpublisher'

ソース

編集:
それがどのように機能するかの一般的なアイデアを提供するために、Backbone の Model#url コードを引用する方が簡単です:

url: function() {
  var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
  if (this.isNew()) return base;
  return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id);
}

したがって、基本的に、urlモデルの属性をオーバーライドすると、この関数は消去され、望ましくない動作も消去されます。

于 2013-04-08T12:09:07.793 に答える