Ember.js 控制器在操作中丢失
我有一个运行在rails应用程序之上的ember.js应用程序。这个余烬应用程序有一个地图和一个视图来处理标记 每次我改变路线,我都要破坏这个视图中的标记。问题是:当我第一次进入Ember.js 控制器在操作中丢失,ember.js,Ember.js,我有一个运行在rails应用程序之上的ember.js应用程序。这个余烬应用程序有一个地图和一个视图来处理标记 每次我改变路线,我都要破坏这个视图中的标记。问题是:当我第一次进入生成标记器时,我得到了我的控制器(this.get(“controller”)),然后在我的dropendobserver上,我可以用另一个this.get(“controller”) 但是当我改变路线并返回时,generateMarker能够获取控制器,但是updateLocation不能。为什么? 首次运行: gen
生成标记器时,我得到了我的控制器(this.get(“controller”)
),然后在我的dropend
observer上,我可以用另一个this.get(“controller”)
但是当我改变路线并返回时,generateMarker
能够获取控制器,但是updateLocation
不能。为什么?
首次运行:
generateMarker: ->
$controller = @get("controller")
# $controller gets the object
然后我问:
updateLocation: (lat, lon, animate = true) ->
...
@get("controller").center_passageiro()
# This also works.
然后我转到另一条路线回来,这次:
generateMarker: ->
$controller = @get("controller")
# $controller gets the object and read valid information
但是:
updateLocation: (lat, lon, animate = true) ->
...
@get("controller").center_passageiro()
# This gives me this error: Cannot call method 'center_passageiro' of null
# And inspecting it i see that this.get('controller') is now returning null
我做错了什么
这是整个课程(使用coffeescript)
编辑
我的路线
Webapp.Router.map ->
@route 'MapEmEspera', path: '/'
@route 'MapEmChamada', path: '/mapa'
@route 'cadastro', path: '/dados'
@route 'novo_cadastro', path: '/cadastrar'
@route 'chamada', path: '/chamar'
@route 'espera', path: '/aguardando'
@route 'taxista', path: '/taxista'
找到我的问题
generateMarker: -> # A generate method because I should create a global object
$controller = @get("controller")
unless Webapp.chamadaMarker? # if this object is already created ignore it
Webapp.chamadaMarker = @
但这给了我一个问题,每当这个对象被销毁时,ember.js
几乎不会将对象设置为null
,这样每次我更改控制器时,我都会得到一个新视图,但全局对象不会更新
要解决此问题,我只需添加以下行:
geraMarker: ->
$controller = @get("controller")
if Webapp.chamadaMarker?
Webapp.chamadaMarker = null
Webapp.chamadaMarker = @
现在它工作正常了你的路线是什么样子的?添加了我的路线,检查我的编辑还有一件事:)你能实际显示控制器或模型设置的位置吗?我的意思是备份ChamadaMarkerView
MyChamadaMarkerView
的控制器被设置在两个不同控制器MapChamada
和MapEspera
的模板上,我使用{view ChamadaMarkerView}
渲染updateLocation
在哪里被调用以及如何调用?
geraMarker: ->
$controller = @get("controller")
if Webapp.chamadaMarker?
Webapp.chamadaMarker = null
Webapp.chamadaMarker = @