我有两个Ember型号:a items和comments.用户将发布项目,其他用户将能够对项目发表评论.
我无法在firebase中设置允许name和description仅由当前用户写入的安全规则,但允许comments由任何登录用户写入.
项目
// app/models/item.js
export default DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
comments: DS.hasMany('comment'),
user: DS.belongsTo('user')
})
Run Code Online (Sandbox Code Playgroud)
评论
// app/models/comment.js
export default DS.Model.extend({
user: DS.belongsTo('user')
body: DS.attr('string'),
timestamp: DS.attr('string'),
item: DS.belongsTo('user')
})
Run Code Online (Sandbox Code Playgroud)
保存评论
// app/components/comment-form.js
const comment = this.get('comment');
const item = this.get('item');
// service that tracks the currently logged in user
const currentUser = this.get('sessionManager.user');
comment.set('timestamp', new Date());
comment.set('user', currentUser);
// setup both sides of the relationship
item.get('comments').pushObject(comment);
comment.set('item', …Run Code Online (Sandbox Code Playgroud) 我是ember.js和firebase的新手.我一直在尝试制作一些需要我查询数据库以获得与定义值匹配的键的东西.
根据guides.emberjs.com,以下示例应该有效:
this.store.query('person', { filter: { name: 'Peter' } }).then(function(peters) {
// Do something with `peters`
});
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.显然是因为我正在使用emberfire插件.经过几个小时的谷歌搜索,没有明确的解决方案.
该余烬文档说说可用参数.
参数
排序依据 - 字符串 -属性...
.
.
.equalTo - String,Number,Null - 创建包含与指定值匹配的子项的查询.
并举一个例子......
// app/routes/dinosaurs.js
export default Ember.Route.extend({
model: function() {
return this.store.find('dinosaur', {
orderBy: 'height',
limitToLast: 10,
startAt: 5
});
}
});
Run Code Online (Sandbox Code Playgroud)
虽然没有展示如何使用'equalTo'.我已经测试了所有这些,但我不明白它是如何equalTo工作的.
关于此,还有其他解决方案,但它们都是v2.0.0之前的版本.所以我认为他们不会在v2.0.0之后工作.
Ember.js调试信息:
DEBUG: -------------------------------
DEBUG: Ember : 2.0.0
DEBUG: Ember Data : 2.0.0
DEBUG: Firebase : …Run Code Online (Sandbox Code Playgroud) 我目前正在使用电子邮件和密码登录。但我希望能够为每个用户分配一个角色:管理员或用户。我已经读到这是通过使用自定义身份验证方法完成的,但我发现文档不清楚无法使用电子邮件/密码身份验证来实现。
我将如何去设置它?
我目前正在为 ember 使用 firebase emberfire
更新:
文档参考:https : //www.firebase.com/docs/web/guide/login/custom.html
tl; dr:在模型保存正式不支持的情况下编辑模型的属性?我似乎记得,在大约2013年,国家机器拒绝了在记录处于飞行状态时进行编辑的尝试,但我认为该限制已被删除.它不再抛出状态机错误......它似乎只会导致错误:/
在我正在处理的应用程序中,按Enter键创建一个新条目并聚焦标题字段,让用户立即开始输入.对该字段的更改将通过去抖动保存自动保留.通常这很好用,但如果我开始输入太快,我会收到以下错误:
Attempted to handle event `didCommit` on <app@model: ...> while in state root.loaded.updated.uncommitted.
Run Code Online (Sandbox Code Playgroud)
(我在底部包含了完整的错误和追溯[1])
该记录看起来似乎已经正确地保存到服务器(Firebase通过EmberFire适配器),但是从那时起该应用程序还有其他奇怪之处(可能是因为运行循环的迭代在完成之前爆炸).
为了了解情况,我将观察者附加到模型currentState.stateName和title字段上.对于无错误的创建和保存,记录将通过以下状态:
[Press Enter; Pause]
|
V
root.loaded.created.uncommitted
|
V
<title observer fires with blank>
|
V
root.loaded.created.inFlight
|
V
root.loaded.saved
|
V
[Type in title]
|
V
root.loaded.updated.uncommitted
|
V
<title observer fires with value>
|
V
root.loaded.updated.inFlight
|
V
root.loaded.saved
Run Code Online (Sandbox Code Playgroud)
出现错误时,过程如下所示:
[Press Enter & type immediately]
|
V
root.loaded.created.uncommitted
|
V …Run Code Online (Sandbox Code Playgroud) 当我尝试使用带有EmberFire的offline-firebase时,我收到了这些错误(并且没有任何内容保存到firebase):

adapters/application.js
export default DS.FirebaseAdapter.extend({
firebase: new OfflineFirebase('https://woot.firebaseio.com/quiz').on('value', function(snapshot){
console.log(snapshot);
}, undefined, undefined, true)
});
Run Code Online (Sandbox Code Playgroud)
app.js
OfflineFirebase.restore();
Run Code Online (Sandbox Code Playgroud)
index.html
<script src="cordova.js"></script>
<script src="js/firebase-debug.js"></script>
<script src="js/OfflineFirebase.js"></script>
<script src="assets/vendor.js"></script>
<script src="assets/woot-prototype.js"></script>
Run Code Online (Sandbox Code Playgroud)
controllers/index.js
export default Ember.ArrayController.extend({
init: function() {
this.set('user', Ember.Object.create());
},
actions: {
getUser: function(){
var newUser = this.store.createRecord('user', {
email: this.get('user.email'),
name: this.get('user.name')
});
console.log(newUser);
newUser.save();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是离线firebase问题还是我做错了什么?:) https://github.com/yeldarby/offline-firebase/issues/6
我在使用Firebase实现基本安全规则时遇到问题(我阅读Firebase和StackExchange上的文档但无法使安全规则有效):
模型(模型的 Emberjs表示):
App.User = DS.Model.extend({
uid: DS.attr('string'),
displayName: DS.attr('string'),
books: DS.hasMany('statistic', { inverse: 'user', async: true}),
actions: DS.hasMany('action', { inverse: 'user', async: true}),
});
App.Action = DS.Model.extend({
date: DS.attr('date'),
actionType: DS.attr('string'),
comment: DS.attr('string'),
user: DS.belongsTo('user', {inverse: 'actions', async: true} )
});
App.Book = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
user: DS.belongsTo('user', { inverse: 'books', async: true} )
});
Run Code Online (Sandbox Code Playgroud)
3个节点(模型)直接存储在Firebase应用程序的根目录中.Book和Action模型有一个user字段(属性).
写入的规则是什么,以便:
userBook和Action中字段的值必须等于auth.uidFirebase中为用户授予读写权限的值.)谢谢
我有一个带有timestamp属性的模型.当在服务器上创建记录时,我希望服务器而不是提供值的客户端使用值初始化此属性的值,以便这些时间戳在不同客户端之间保持一致.
如果我直接使用firebase API,那么我理解我可以使用特殊令牌Firebase.ServerValue.TIMESTAMP来实现这一点.但我无法弄清楚如何使用ember-data和emberfire适配器来做到这一点.
在命令行中执行以下步骤以使用节点安装Ember CLI,Firebase和EmberFire后,我收到一条错误消息,指出未在app/adapter/application.js中定义Firebase
npm install -g ember-cli
npm install -g bower
npm install -g phantomjs
ember new my-new-app
cd my-new-app
ember server
Run Code Online (Sandbox Code Playgroud)
此时我可以在localhost上看到我的ember应用程序的默认输出"Welcome to Ember.js":4200
npm install firebase
npm install —save ember-fire
ember generate adapter application
Run Code Online (Sandbox Code Playgroud)
然后在app/adapter/application.js中,删除"export default DS.RESTAdapter.extend({});"并粘贴"export default DS.FirebaseAdapter.extend({firebase:new Firebase('https://.firebaseio. com')});"使用我自己的firebase URL
ember server
Run Code Online (Sandbox Code Playgroud)
然后我在终端收到错误:
Serving on http://0.0.0.0:4200
lionworxs/adapters/application.js: line 4, col 17, 'Firebase' is not defined.
1 error
===== 1 JSHint Error
Path or pattern "vendor/firebase/firebase.js" did not match any files
Error: Path or pattern "vendor/firebase/firebase.js" did not …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我认为我是一个相当标准的User模型,其ID基于经过身份验证的用户的fbRef.getAuth().uid值(在我的情况下由匿名身份验证提供程序分配).我有一个全局用户,可以在用户进行身份验证/取消身份验证时动态更新,并使用基本this.store.find('user')调用进行填充.
当用户注销,然后使用相同的身份验证重新进行身份验证/登录时,就会出现问题.我在其他当前连接的浏览器的控制台中收到以下错误:
未捕获错误:
pushedData在状态root.deleted.uncommitted中尝试处理事件.
(但请注意,执行注销/重新登录的用户/浏览器不会收到错误)
在这种情况下我还需要做些什么来确保emberfire自动删除的记录在每个连接的客户端的缓存存储中完全提交,或者这是某种限制?
作为参考,以下是我在用户登录时创建记录的方式:
var user = this.store.createRecord('user', {
id: fbRef.getAuth().uid,
nickname: nickname,
joinedAt: new Date()
});
user.save();
Run Code Online (Sandbox Code Playgroud)
当他们退出时:
this.store.find('user', fbRef.getAuth().uid).then(function(user) {
user.destroyRecord();
});
Run Code Online (Sandbox Code Playgroud) 我对Ember和EmberFire比较陌生.我正在开发一个客户/徽标管理应用程序.我目前已按预期运行Firebase身份验证和Firebase数据.当我将徽标上传到Firebase存储空间时,出现此错误:
Uncaught Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp(). firebase.js:30
Run Code Online (Sandbox Code Playgroud)
这是被调用的动作:
调节器
firebase: Ember.inject.service( 'firebase' ),
actions: {
createClient(){
let name = this.get( 'clientName' );
let image = document.getElementById( 'client-image' );
let storeName = name.replace( / /g, '' );
let storageRef = firebase.storage().ref();
let file = image.files[0];
let metadata = {
'contentType' : file.type
};
let uploadTask = storageRef.child( `uploads/${storeName}/${file.name}` ).put( file, metadata );
uploadTask.on( 'state_changed', null, function( error ){
console.error( 'Upload Failed:', error ); …Run Code Online (Sandbox Code Playgroud) ember.js ×10
emberfire ×10
firebase ×7
ember-data ×3
javascript ×2
ember-cli ×1
npm ×1
offlineapps ×1