2013-10-03 58 views
0

我在控制器中的功能檢查,如果事情是確定的變化與transtionToRouteTranstionToRoute劑量不勾模型

路線

起初創建包含本地存儲適配器一個新的記錄,然後我想改變路線:

var i = this.store.createRecord('axisModel', { 
      id: Math.random().toString(32).slice(2).substr(0, 5), //random ID generator 
      uniqueName: item.uniqueName, 
      name: item.name, 
      hierarchyUniqueName: item.hierarchyUniqueName, 
      type: 'filter', 
      isMeasure: item.isMeasure, 
      orderId: "", 
      isActive: true 
     }); 
     i.save(); 
this.transitionToRoute('filters', item); 

濾波器途徑代碼是這樣的:

App.FiltersRoute = Ember.Route.extend({ 
model:function(params){ 
    console.log('here'); 
    return this.store.find('axisModel',params.filters_id); 
} 
}); 

但是當路由變化,我不能執行console.log的看到「這裏」(),也我得到這個錯誤:

Assertion failed: Error while loading route: TypeError: Object [object Object] has no method 'addArrayObserver' 
+0

「item」從哪裏來? – intuitivepixel

回答

1

我認爲你正在使用的each視圖助手在你filters模板和引用的模型,但它是一個對象不是一個數組:

{{#each}} ... 

{{#each model}} ... 

所以你會收到這個錯誤,因爲視圖助手會嘗試添加觀察者來更新數組更改時的UI。但是,燼對象沒有addArrayObserver方法,並且此錯誤將被拋出。

您可以在各個刪除,或者如果你希望不止一個結果,使用store.filter

this.store.filter('axisModel', function(model) { 
    model.get('someProperty') == otherProperty; 
}); 
1

如果你想查詢的記錄數組,以find第二個參數應該是一個對象與查詢參數例如

model: function(params) { 
    return this.store.find('axisModel', { filter: params.filters_id }); 
} 

既然你只是傳遞一個ID,您將查詢單個記錄(與ID)和您生成的控制器將是一個ObjectController(而不是ArrayController)不與#each工作。

0

當您在內部從Ember應用程序內部過渡到路線時,使用link-to,transitionTotransitionToRoute跳過model掛鉤。 Ember期望您在轉換時將您要使用的模型傳遞到路線中。這就是爲什麼你沒有看到你所期望的console.log聲明。

另一個可能的問題是,當你調用這個:

this.transitionToRoute('filters', item) 

你的'filters'路徑提供一個單一的項目作爲model。但是,如果你要重新加載,並且獲得model鉤子,那麼您使用的是返回集合:

this.store.find('axisModel',params.filters_id)