2012-11-02 38 views
0

我有一個位置模型和一個記錄器模型。我希望能夠將兩個數據集的所有數據傳遞給我的視圖模型。我該如何訪問它們,但因爲我覺得他們不是在範圍,因爲我越來越不確定的錯誤,因爲我打電話「所有」如何從控制器訪問多個模型

https://gist.github.com/3998302

var Main = function() { 
    this.index = function (req, resp, params) { 
    var self = this; 
    var data = {}; 
    geddy.model.Locations.all(function(err, locations) { 
     data.locations = locations; 
     geddy.model.Recorders.all(function(err, recorders) { 
      data.recorders = recorders; 
      self.respond({params: params, data: data}, { 
      format: 'html' 
      , template: 'app/views/locations/index' 
      } 
     }); 
    });); 
    }; 

}; 

exports.Main = Main; 

錯誤片段:

timers.js:103 
      if (!process.listeners('uncaughtException').length) throw e; 
                    ^
TypeError: Cannot call method 'all' of undefined 
    at index (G:\code\PeopleTracker\app\controllers\main.js:23:24) 
    at controller.BaseController._handleAction.callback (C:\Users\Chris\AppData\Roaming\npm\node_modules\geddy\lib\base_ 
controller.js:387:22) 

回答

0

所以看起來你正在初始化data變量爲'undefined'。改爲嘗試data = {}。如果這不能解決它,我會和你一起排除故障。

編輯

如果不爲你做它,嘗試重新安裝geddy:

npm uninstall -g geddy && npm install -g geddy

如果不這樣做,請確保您的數據庫實際上是運行,確保定義了模型(嘗試geddy console檢查您的模型),並確保您使用的是最新穩定版本的節點。

+0

正確:JavaScript並不像Perl那樣「自動化」對象。將一個屬性賦值給一個未定義的變量不會自動將該變量轉換爲對象引用。 – ebohlman

+0

我改變了這一點,它仍然給我一個錯誤。 timers.js:103 if(!process.listeners('uncaughtException')。length)throw e; ^ TypeError:無法在index(G:\ code \ PeopleTracker \ app \ controllers \ main.js:23:24)處調用未定義的 方法'all' at controller.BaseController._handleAction.callback(C:\ Users \ Chris \ AppData \ Roaming \ npm \ node_modules \ geddy \ lib \ base_ controller.js:387:22) – cmp

0

非常遲到了,但我相信你可以叫

geddy.model.Locations.all(function(err, locations) { 
    geddy.model.Recorders.all(function(err, recorders) { 
     var data = {}; 
     data.locations = locations; 
     data.recorders = recorders; 
     self.respond({params: params, data: data}, { 
     format: 'html' 
     , template: 'app/views/locations/index' 
     } 
    }); 
});); 

您可能也有迴應說

self.respond({params: params, locations: locations, recorders: recorders}); 

但如果你想所有這些數據可以從數據文字你需要它在最小範圍回調中定義。回調函數可以在它們的範圍之上讀取,但是它們不能在其上面寫。

相關問題