【发布时间】:2014-06-16 01:29:46
【问题描述】:
我正在尝试在一个项目中同时使用 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' }));
});
您能提供的任何帮助将不胜感激。
【问题讨论】:
-
我相当肯定,由于 Firebase 内部会执行一些自己的请求,因此您需要等待 Firebase 对象被实例化。 Requirejs 有一个测试方法(我不记得语法)来等待一个对象在被认为加载之前初始化。你需要利用它。
-
@Kato 下午好。
Firebase在 test.js 中执行定义回调函数时完全实例化。我通过完全绕过Backbone、创建new Firebase并设置测试值来测试这一点。请参阅我修改后的问题。
标签: javascript backbone.js requirejs firebase