我正在尝试在项目中同时使用RequireJS,Backbone,Firebase和Backfire,并且我很难开始使用。这是一个简单的例子:
main.js
require.config({
paths: {
backbone: 'backbone',
backfire: 'backfire',
firebase: 'firebase',
underscore: 'underscore',
jquery: 'jquery',
test: 'test'
},
shim: {
'firebase': {
exports: 'Firebase'
},
'underscore': {
exports: '_'
},
'backbone': {
deps: [ 'underscore', 'jquery' ],
exports: 'Backbone'
},
'backfire': {
deps: [ 'backbone', 'firebase', 'underscore' ]
}
}
});
requirejs([ 'test' ]);
test.js
define([ 'backbone', 'firebase', 'backfire' ], function( Backbone, Firebase ){
var Person = Backbone.Model.extend({
defaults: function() {
return {
fName: 'John',
lName: 'Doe'
};
}
});
var database = Backbone.Firebase.Collection.extend({
model: Person,
firebase: new Firebase( 'https://ref.firebaseio.com' )
});
console.log( typeof database ); // function
// The following throws "Uncaught TypeError: undefined is not a function"
database.add( new Person({ fName: 'Matthew', lName: 'Hasbach' }));
});
非常感谢您提供的任何帮助。
答案 0 :(得分:3)
您需要首先实例化您的收藏(使用new
)。
var database = new Backbone.Firebase.Collection.extend({
model: Person,
firebase: new Firebase( 'https://ref.firebaseio.com' )
});
答案 1 :(得分:1)
正如jgillich在他的回答中所说,我没有实例化Backbone.Firebase.Collection
。但是,需要注意的是,在Backbone中,为了在同一个赋值中定义和实例化集合,不能使用extend
方法。相反,必须使用new Backbone.Collection
。这也适用于其他Backbone对象,如模型。
然而,Backbone.Firebase.Collection
的定义和实例化(在撰写本文时)必须分成单独的作业。似乎不支持new Backbone.Firebase.Collection
。这是一个例子:
<强> test.js 强>
define([ 'backbone', 'firebase', 'backfire' ], function( Backbone, Firebase ){
var Person = Backbone.Model.extend({
defaults: function() {
return {
fName: 'John',
lName: 'Doe'
};
}
});
var Database = Backbone.Firebase.Collection.extend({
model: Person,
firebase: new Firebase( 'https://ref.firebaseio.com' )
});
var db = new Database;
// Success!
db.add( new Person({ fName: 'Matthew', lName: 'Hasbach' }));
// Uncaught TypeError: Cannot read property 'ref' of undefined
var nope = new Backbone.Firebase.Collection({
model: Person,
firebase: new Firebase( 'https://ref.firebaseio.com' )
});
});