Ruby on rails 3 当通过路由器反序列化时,余烬数据检查是否在存储中找到模型
我在路由器中有一个带有Ruby on rails 3 当通过路由器反序列化时,余烬数据检查是否在存储中找到模型,ruby-on-rails-3,ember.js,ember-data,ember-old-router,Ruby On Rails 3,Ember.js,Ember Data,Ember Old Router,我在路由器中有一个带有connectOutlets的对象路由(使用标准REST后端的ember数据),它只需反序列化和加载对象并将其插入插座 # inside router action: Ember.Route.extend route: 'object/:object_id' connectOutlets: (router, object) -> unless object.get('isLoaded') # What goes here to
connectOutlets
的对象路由(使用标准REST后端的ember数据),它只需反序列化和加载对象并将其插入插座
# inside router
action: Ember.Route.extend
route: 'object/:object_id'
connectOutlets: (router, object) ->
unless object.get('isLoaded') # What goes here to tell if the object wasn't found?
#
# handle this case (e.g., redirect)
#
else # otherwise proceed as normal
router.get('applicationController').connectOutlet('object', object)
当我导航到不存在的localhost/#object/object\u
时,路由器反序列化url,尝试加载对象(服务器日志显示不存在的localhost/objects/object\u的HTTP GET请求),获取404,并创建一个id设置为不存在的object\u的新对象
我想查出这件事并处理此案。现在,我正在检查isLoaded
属性,它确实区分了现有模型和不存在的模型,但我不确定这是最好的方法
理想情况下,会有一种类似于Rails的方法,new\u record?
看看源代码:
我还没有尝试过,但是是新的可能就是您要寻找的。看看源代码:
我还没有尝试过,但您可能正在寻找的是isNew
。您不想在connectOutlet中执行此操作,因为它需要应用程序等待,同时检查数据库中的记录
就我个人而言,我会在适配器中使用自定义的查找方法,并从那里处理404错误
find: function(store, type, id) {
var root = this.rootForType(type);
this.ajax(this.buildURL(root, id), "GET", {
success: function(json) {
this.didFindRecord(store, type, json, id);
},
statusCode: {
404: function() {
# I can never remember the exact semantics, but I think it's something like this
this.trigger('didNotFindRecord');
}
}
})
}
connectOutlets: (router, object) ->
router.get('store').addObserver('didNotFindRecord', this, 'handle404')
router.get('applicationController').connectOutlet('object', object)
handle404: ->
#
# handle this case (e.g., redirect)
#
但是,您必须小心正确地拆除观察程序。您不希望在connectOutlet中执行此操作,因为它将要求应用程序在检查数据库记录时等待
就我个人而言,我会在适配器中使用自定义的查找方法,并从那里处理404错误
find: function(store, type, id) {
var root = this.rootForType(type);
this.ajax(this.buildURL(root, id), "GET", {
success: function(json) {
this.didFindRecord(store, type, json, id);
},
statusCode: {
404: function() {
# I can never remember the exact semantics, but I think it's something like this
this.trigger('didNotFindRecord');
}
}
})
}
connectOutlets: (router, object) ->
router.get('store').addObserver('didNotFindRecord', this, 'handle404')
router.get('applicationController').connectOutlet('object', object)
handle404: ->
#
# handle this case (e.g., redirect)
#
不过,您必须小心正确地拆除观察者。谢谢您的回答——我不认为“等待应用程序检查数据库记录”是在connectOutlets中不这样做的相关异议,因为我使用的是余烬数据,在调用connectOutlets时,应用程序已尝试获取对象(无论对象是否存在于数据库中)。我正在为我的适配器使用ember数据——我假设我不需要在开箱即用的情况下对其进行太多的修补。Sherwin:我认为异步UI应该是任何现代web应用程序的重要组成部分,而等待AJAX调用完成是一个令人难以置信的相关异议。也就是说,如果你只是为了好玩而拼凑一些东西,那就去做吧。至于修补余烬数据,我相信一旦稳定下来,库中将添加更好的处理方法,因此,它只是添加了一些不存在的特性来寻找答案——我不认为“等待应用程序检查数据库中的记录”是在connectOutlets中不这样做的相关异议,因为我使用的是余烬数据,在调用connectOutlets时,应用程序已经尝试获取对象(无论数据库中是否存在)Sherwin:我认为异步UI应该是任何现代web应用程序的一个重要组成部分,而等待AJAX调用完成是一个令人难以置信的相关异议。也就是说,如果你只是为了好玩而拼凑一些东西,那就去吧或者它。至于修补余烬数据,我相信一个更好的处理方法会在稳定后添加到库中,所以它只是添加了不存在的特性