1
序言: 我不確定這是不是問這個問題的最好方法,因爲我相信它比我做得更一般,可能有一個全球模式,解決我的關切。locomotivejs和mongoose:將承諾變量傳遞給控制器
目前這裏是我正在使用的原始代碼的上下文中的問題。
給定一個locomotivejs控制器,讓我們稱之爲Contact_Controller,與一般的結構是這樣的:
'\controllers\contact_controller.js
var locomotive = require('locomotive')
, Controller = locomotive.Controller
, Contact = require('../models/contact')
, sender = require('../helpers/sender')
;
var Contact_Controller = new Controller();
然後:
Contact_Controller.list = function() {
//Provides a list of all current (successful) contact attempts
var controller = this;
Contact.find({status: 1}, function(err, results) {
if(err) {
controller.redirect(controller.urlFor({controller: "dashboard", action: "error"}));
}
controller.contacts = results;
controller.render();
});
};
和模型:
'/models/contact.js
var mongoose = require('mongoose')
, mongooseTypes = require('mongoose-types')
, pass = require('pwd')
, crypto = require('crypto')
, Schema = mongoose.Schema
, Email = mongoose.SchemaTypes.Email;
var ContactSchema = new Schema({
email: {type: Email, required: true},
subject: {type: String, required: true },
message: { type: String, required: true},
status: {type: Number, required: true, default: 1},
contact_time: {type: Date, default: Date.now}
});
module.exports = mongoose.model('contact', ContactSchema);
裏面的列表action的contact_controller我真的寧願不使用controller = this;
我通常更喜歡使用redirect = this.redirect.bind(this);
風格的本地化綁定來處理這些情況。
但是,我想不出一種方法來將結果返回給控制器的this
對象,而無需創建全局變量版本this
並且承諾的回調對話。有沒有更好的方法來返回結果變量或暴露此上下文中的contact_controller對象?
這就是我期待的那種簡單。謝謝。 –
robertklep,我剛回到這個問題,我想說謝謝。我在過去幾個月的編碼中發現這種模式非常有用。 –