1

アプリに奇妙な問題があります。コレクションをレンダリングすると、印刷すると「空」になりましたが、コレクション内のこのコレクションを console.log すると、モデル内に 2 つの配列があります。さて、これは私のスクリプトです:

define([
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/folder.html',
    'models/folder',
    'collections/folder',
    ], function($, _, Backbone, FolderTemplate, FolderModel, FolderCollection){
    var FolderView = Backbone.View.extend({
        el:$('#folder'),
        template:_.template(FolderTemplate),

        initialize: function(){
            this.render();
        },
        render: function(){
            console.log(this.collection.models);
        }
    });

    return FolderView;
});

ビューを呼び出すには、別のアプリ内で使用します:

this.folders = new FolderCollection();
this.folders.fetch({ data: { dir: 'uploads'} });
this.foldersView = new FolderView({collection: this.folders});

このアプリconsole.log(this.collection.models);では空ですが、setTimeOut を使用してこのようなものを作成すると、console.log が正しい配列を返します。

define([
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/folder.html',
    'models/folder',
    'collections/folder',
    ], function($, _, Backbone, FolderTemplate, FolderModel, FolderCollection){
    var FolderView = Backbone.View.extend({
        el:$('#folder'),
        template:_.template(FolderTemplate),

        initialize: function(){
            var here = this;
            setTimeout(function(){
                  here.render();
            },800);
        },
        render: function(){
            console.log(this.collection.models);
        }
    });

    return FolderView;
});

setTimeOut なしで使用するにはどうすればよいですthis.render()か。そのようなものを作成するのは正しくないか、ロジックではないと思うからです。

ありがとう

4

3 に答える 3

3

メソッドresetを呼び出すイベントをリッスンできますrender

交換

initialize: function(){
   var here = this;
   setTimeout(function(){
   here.render();
   },800);
},

initialize: function(){
   this.listenTo(this.collection, 'reset', this.render);
},
于 2013-07-20T20:22:27.323 に答える
2

これを試してください:

initialize: function(){
  var self = this;
  this.collection.fetch({
     success: function(){
         self.render();
     }
  });
}
于 2013-07-20T20:04:27.203 に答える
0

あなたがこれをしなければならない理由は、this.folders.fetch時間がかかるからです。タイムアウトを設定する代わりに、代わりにイベントを使用する必要があります。成功時にイベントをCollection.fetch発生させます。change

したがって、代わりに次のようなものを検討してください。

this.collection.on("change", this.render);
于 2013-07-20T19:56:35.000 に答える