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
という名前のサブフォルダーを含むフォルダーで構成されています。私なら、私は得る:
collections
models
views
console.log(this)
私のデータはそこにありますが、これは私が必要とするものですか? コレクションを取得しようとしても取得できないのはなぜconsole.log
ですか?