1

以前の投稿から、次のコード ブロックを使用して作業しました。

;(function(){

    var mythings = {};

    function initializer($, _, Backbone, tableModel){
        return Backbone.Collection.extend({
            url: 'main-contact',  <!-- this used to be this.url.
            model: tableModel,
            initialize: function(models, options) {
               this.fetch();
            }
        });
    }

    define([
        'jquery',
        'underscore',
        'backbone',
        'models/tableModel'
    ],
    function($, _, Backbone, tableModel) {
        if (!mythings.tablesCollection){
            // this will be done on first run.
            mythings.tablesCollection = initializer($, _, Backbone, tableModel);
        }
        // all others will just return same exact instance of collection class
        return mythings.tablesCollection;
    });

})();

まず、ブロックの先頭にあるセミコロンは何を意味するのでしょうか? 次に、次のように、ルートで実行時に URL を渡す必要があります。

var t = new tablesCollection(null, { url: 'main-contact'} );

これは、AMD としてこのプロジェクトを再作成しようとしているときに、私が今まで行ってきたことです。このように、実行時に URL を自己呼び出しコードのブロックに渡すにはどうすればよいですか?

編集:

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

});

4

1 に答える 1

0

まず、他のコメント投稿者が指摘しているように、余分な「モジュールパターン」のラッピングは必要ありません。コードは次のように簡略化できます。

define(['jquery',
        'underscore',
        'backbone',
        'models/tableModel'
], function($, _, Backbone, tableModel) {
    return Backbone.Collection.extend({
        url: 'main-contact',  //<-- this used to be this.url.
        model: tableModel,
        initialize: function(models, options) {
            this.fetch();
        }
    });
});

次に、他の場所で次のことができます。

require(['path/to/TablesCollection', function(TablesCollection) {
    var t = new TablesCollection(null, {url: 'main-contact'});
});

あなたが望むように、URLを渡す...ほとんど。最後の問題が1つあります。それは、コレクションがオプションのURLを使用することを認識していないことです。それを修正しましょう:

        initialize: function(models, options) {
            this.url = options.url;
            this.fetch();
        }

これですべての準備が整いました(ただし、混乱が生じた場合は投稿してください)。

于 2013-01-29T23:46:54.130 に答える