当我调用
App.store.createRecord(App.User, { name: this.get("name") });
App.store.commit();
Run Code Online (Sandbox Code Playgroud)
我怎么知道它是否成功以及如何等待asyn消息?
我无法使用ember-data rev12实现我所理解的多态关系.
我有以下型号:
App.Project = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.Proposal = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.Employee = DS.Model.extend
lists: DS.hasMany('App.List', { polymorphic: true })
App.List = DS.Model.extend
name: DS.attr('string')
#project: DS.belongsTo('App.Project', { polymorphic: true })
Run Code Online (Sandbox Code Playgroud)
我试图从项目路由器创建一个新的列表,如此.
App.ProjectRoute = Ember.Route.extend
events:
newList: (project) ->
lists = project.get('lists')
list = App.List.createRecord(name: 'list1')
lists.pushObject(list)
@store.commit()
Run Code Online (Sandbox Code Playgroud)
但是对服务器的请求是错误地设置了多态键.
我期待有效载荷看起来像:
{ list: { name: list1, listable_type: project, listable_id: 100 } }
Run Code Online (Sandbox Code Playgroud)
但得到了:
{ list: { name: list1, project_type: project, project_id: …Run Code Online (Sandbox Code Playgroud) 使用本指南:https://github.com/heartsentwined/ember-auth-rails-demo为rails 4 + ember-auth + devise + bootstrap设置入门工具包
我收到这个错误:
undefined local variable or method `build_resource' for #<SessionsController:0x007ffd4783b9d0>
我的控制台给了我:
NameError (undefined local variable or method `build_resource' for #<SessionsController:0x007ffd4783b9d0>):
app/controllers/sessions_controller.rb:5:in `create'
这是我的公共回购的链接:https://github.com/amaanr/ember-rails4-starter-kit/tree/ember-auth
随意克隆并确保做一个rake db:create,rake db:migrate并且rake db:seed
在我的后端,我有一个可用的电话号码列表:/api/phonenumbers.我有一个模型:App.Phonenumber.我可以用我的所有电话号码App.Phonenumber.find();
现在我想过滤一下phonenumbers列表,只获取给定国家/城市的那些.后端能够通过接收/api/phonenumbers?country=DE&city=Berlin查询字符串来执行此过滤.
Phonenumber模型以便能够传递这些查询字符串参数?find使用这些查询参数执行?我有一个简单的Ember应用程序,它获得了一系列模型:
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.store.find("swap");
}
});
Run Code Online (Sandbox Code Playgroud)
然后我在视图中输出它们就像这样:
{{#each model}}
output stuff here
{{/each}}
Run Code Online (Sandbox Code Playgroud)
一切正常.我还有一个表单,可以让人们添加这个模型的新实例,它工作正常,并将新记录添加到底部.
但是,我想反向做.据我所知,我有两个选择:
createdAt带日期的属性,因此按createdAt属性按降序排列每个模型我认为第二种选择更有意义,但我不知道如何处理它.
目前我只有一个App.IndexRoute,然后我有一个App.ApplicationController我已经添加了一些自定义属性.我假设我需要添加另一个属性或方法来从商店获取数据并按顺序排序createdAt?
我有一个控制器,列出了系统中的所有测量单位.当用户在Uom模型中选择特定记录时,我希望能够删除它.我正在使用Ember-Data beta-2.这是我到目前为止所拥有的:
App.UomsController = Ember.ArrayController.extend({
actions: {
deleteRecord: function(id) {
console.log("deleting: " + id);
var promisedDelete = this.store.find('uom',id).then(function(uom){
uom.deleteRecord();
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
该操作deleteRecord被称为传入有效ID,并返回承诺.使用then()承诺的功能,然后deleteRecord()当承诺履行并且它似乎在本地工作时,调用Ember .我这样说是因为这条记录会立即从屏幕和Ember调试器中消失.不幸的是,删除没有被持久化到后端,并且重新加载hte页面会立即恢复本地"已删除"记录.
我的问题是:
所以我使用的是Ember 1.5.1和Ember-data 1.0.0 beta7
我有以下路线
App.Router.map ->
@resource "items"
@resource 'item', path: '/items/:id
项目从服务器获取.如果我开始这条路线,这两条路线就可以正常工作; 奇怪的事情发生在我开始项目页面(/ items/1),然后我尝试导航到/ items /通过一个链接,其中的动作由ItemController中的函数this.transitionToRoute("items")处理.我收到以下错误:
尝试过渡到项目ember.js?body = 1:3524
转换#2:items:调用beforeModel hook ember.js?body = 1:3524
转换#2:items:调用deserialize hook ember.js?body = 1:3524
Error while loading route: Error: Cannot perform operations on a Metamorph that is not in the DOM.
at Metamorph.checkRemoved (http://localhost:3000/assets/ember.js?body=1:27009:15)
at Metamorph.html (http://localhost:3000/assets/ember.js?body=1:26979:12)
at Object.DOMManager.empty (http://localhost:3000/assets/ember.js?body=1:27974:16)
at Object.Ember.merge.empty (http://localhost:3000/assets/ember.js?body=1:25139:21)
at Ember.CollectionView.Ember.ContainerView.extend.arrayWillChange (http://localhost:3000/assets/ember.js?body=1:25962:25)
at Object.sendEvent (http://localhost:3000/assets/ember.js?body=1:2600:14)
at Ember.Array.Ember.Mixin.create.arrayContentWillChange (http://localhost:3000/assets/ember.js?body=1:15317:11)
at superFunction [as _super] (http://localhost:3000/assets/ember.js?body=1:7726:16)
at RecordArray.extend.arrayContentWillChange (http://localhost:3000/assets/ember-data.js?body=1:7624:28)
at superWrapper [as …Run Code Online (Sandbox Code Playgroud) 我在生产现场使用Ember,正在考虑添加Ember Data.但是,我担心它仍处于测试阶段.
有谁知道我们什么时候可以期待一个稳定的发布?
我似乎无法在任何地方找到任何路线图或日期.
在我的应用程序中,我认为我是一个相当标准的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) 我需要在model钩子后设置一个控制器属性.我可以想到两种方法:
model(params) {
return this.store.findRecord('user', 1);
},
afterModel(model, transition) {
model.get('profile').then(profile => {
this.set('profile', profile);
});
},
setupController(controller, model) {
controller.set('model', model);
controller.set('profile', this.get('profile'));
},
Run Code Online (Sandbox Code Playgroud)
另一种方法.即跳过setupController:
model(params) {
return this.store.findRecord('user', 1);
},
afterModel(model, transition) {
model.get('profile').then(profile => {
this.controller.set('profile', profile);
});
},
Run Code Online (Sandbox Code Playgroud)
两者似乎都有效.
两种方法都有任何额外的优点/缺点吗?显然,后者更短.但是在afterModel钩子中设置控制器属性是否感觉"干净" ?
编辑:之间的关系/关联user和profile是async.
ember-data ×10
ember.js ×10
ajax ×1
asynchronous ×1
devise ×1
ember-cli ×1
emberfire ×1
firebase ×1
javascript ×1
jquery ×1
ruby ×1
url-routing ×1