3

AMD アプローチを使用しようとして Backbone.js アプリを書き直しています。Backbone と Underscore の AMD 化バージョンをダウンロードしました。私がチェックしたところ、jQuery、Backbone、および Underscore がすべて呼び出されます。これはかなり単純なプロジェクトですが、何らかの理由でコレクションがビューに渡されなくなりました。私はAMDが初めてです。

これが私のモデルです:

define([
    'underscore',
    'backbone'
], function(_, Backbone) {
    var tableModel = Backbone.Model.extend({});
    return tableModel;
});

ここに私のコレクションがあります:

define([
    'jquery',
    'underscore',
    'backbone',
    'models/tableModel'
],
function($, _, Backbone, tableModel) {
    var tablesCollection = Backbone.Collection.extend({
        url: this.url,  // passed into collection at runtime, so same code can process multiple sets of data
        model: tableModel,
        initialize: function(models, options) {
            if (options && options.url) {
                this.url = options.url;
            }
            this.fetch({
                success: function(data, options) {
                    if ($.isEmptyObject(data.models)) {
                        App.Collections.Tables.NoData(data);
                    }

                }
            });
        }
    });

    return tablesCollection;
});

これが私の見解です:

define([
    'jquery',
    'underscore',
    'backbone',
    'models/tableModel',
    'collections/tablesCollection',
    'views/tableView'
],
function($, _, Backbone, tableModel, tablesCollection, tableView) {
    var tv = Backbone.View.extend({
        tagName: 'div',
        initialize: function() {
            console.log(this.collection);  // returns collection and undefined 
            this.collection.on('reset', this.render, this);  // errors: this.collection is undefined
        },
        render: function() {
            return this;
        }
    });

    return tv;
});

ビューとコレクションがインスタンス化される場所は次のとおりです。

define([
    'jquery',
    'underscore',
    'backbone',
    'models/tableModel',
    'collections/tablesCollection',
    'views/tablesView'
], function($, _, Backbone, tableModel, tablesCollection, tablesView) {
    var t = new tablesCollection(null, { url: 'main-contact'} );
    var tables = new tablesView({ collection: t, template: 'main-contact-template'});
    $('#web-leads').html(tables.render().el);

});

なぜ私はfunction (){return c.apply(this,arguments)}戻ってくるのconsole.log(tablesCollection)ですか?コレクションが渡されていないようです。パスの問題でしょうか? 私のプロジェクトは、とjsという名前のサブフォルダーを含むフォルダーで構成されています。私なら、私は得る: collectionsmodelsviewsconsole.log(this)ここに画像の説明を入力

私のデータはそこにありますが、これは私が必要とするものですか? コレクションを取得しようとしても取得できないのはなぜconsole.logですか?

4

2 に答える 2

0

表示されるのは、関数tablesCollection、つまりBackbone.Collection.extend(...)関数です。

関数tablesCollectionは、おそらくビューに正常に渡されます。ただし、オブジェクトをインスタンス化する必要があります。たとえば、新しいtablesCollection(null、{url:'url'})をインスタンス化してからコンソールに記録します。そうしないと、extendラッパー関数が表示されます。

于 2013-01-29T18:10:19.293 に答える
0

tablesCollection直接使用しないでください。を使用しthis.collectionます。あなたはすでにそれでビューを初期化しています

于 2013-01-29T17:55:06.243 に答える