8
loadMore: function(){
    var $this = this;
    console.log(this.Messages); //SAME AS AFTER
    this.Messages.url = '/js/messages/?start=' + this.Messages.length
    this.Messages.fetch({'add':true,
        success:function(){
            console.log($this.Messages); //SAME AS BEFORE??
        },
        error:function(){
        }
    });
 },

コレクションは更新されません。この関数の後、イベントが発生し、新しいアイテムが画面に描画されます。問題は、コレクションに新しいモデルが追加されなかったことです。

4

4 に答える 4

0

Backbone.Collection.fetch():

fetch: function(options) {
  options = options ? _.clone(options) : {};
  if (options.parse === void 0) options.parse = true;
  var success = options.success;
  options.success = function(collection, resp, options) {
    var method = options.update ? 'update' : 'reset';
    collection[method](resp, options);
    if (success) success(collection, resp, options);
  };
  return this.sync('read', this, options);
},

つまり、ここでの処理は、渡された関数がに割り当てられるということvar succeesです。
collection[method](resp, options);が呼び出され、あなたの場合、メソッドは'reset'です。
collection.resetすべてのモデルを調べて追加し、途中ですべてのイベントを発生させる必要があります。何が起こっているのか正確にはわかりませんが、、、、などを通過しますcollection.reset...私はそれをすべてフォローしていませんでした。collection.addmodel.add

問題が正確に何であるかわかりません、それについては申し訳ありません。私は少なくともあなたがいくつかのことを試すのを手伝ってくれることを願っています。そうすれば私たちはそれを理解できるかもしれません。この行if (success) success(collection, resp, options)は、succes関数の呼び出しです。あなたがやろうとするかもしれないことは、あなたの成功コールバックに渡された引数を受け入れさせて、それらのいくつかの慰めをすることです:

success: function(collection, resp, options) {
  console.log(collection); // this might do the trick.

  // if not, you could try the following
  collection.on("reset", function(c, options) {
    console.log(c); // see what that gives ya.
  });
}

もう1つは、collection.fetchが追加オプションを使用するソースまたはドキュメントのどこにも見つからなかったことです。見逃してしまった場合は、見たいと思いますのでお知らせください。

頑張って、あなたが見つけたものを私に知らせてください。デバッガーのステップスルーも実行する価値があるかもしれません。

たわごと、それはまた、コンソールが持ってはいけないときにコレクションオブジェクトの最新バージョンを私にしばしば見せてくれたことにも私を驚かせます。

代わりに、コレクションの長さを慰めてみてください。

var len = $this.Messages.length;
console.log(len);


//...
// or in the success callback
var len = collection.length;
console.log(len);
于 2013-03-09T11:38:36.150 に答える
0

バックボーン 1.0 では、手動でリセットをトリガーする必要があります。

youColloection.fetch({reset: true});
于 2013-12-11T12:05:16.987 に答える
0

Backbone 1.0 はこの機能を削除し、これに依存するコードを壊します:

http://backbonejs.org/#Collection-fetch

と比べて:

「コレクションのコンテンツを置き換える代わりに、現在のコレクションに入ってくるモデルを追加したい場合は、取得するオプションとして {add: true} を渡します。」

http://htmlpreview.github.com/?https://raw.github.com/documentcloud/backbone/0.9.2/index.html#Collection-fetch

この問題が修正されるまで、古いバージョンの Backbone に戻すことをお勧めします。

于 2013-04-02T03:35:26.300 に答える