我整天都在反对这个问题,我觉得我已接近解决方案,但却无法实现.我正在使用Ember.js和Ember-Data以及Fixtures适配器,最终迁移到REST适配器.基本问题是:我有网站和主管,有多对多的关系.我想向用户显示他们现有站点/主管配对的选择框,按站点排序,即:
我需要将这两个资源争用到一个数组中,我可以将其传递给从Ember.Select继承(或将继承)的视图.目前我正在尝试使用Supervisors控制器上的一个方法,我称之为"平坦",因为它将返回一个表示这些关系的扁平数组.控制器如下所示.我正在使用.find().then()来处理承诺完成后的数据.我得到的数据似乎包含我的所有四个灯具,但是当我尝试它们的任何可枚举方法时(特别是forEach),它的行为就像它只返回了第一个对象一样.我试过迭代数据对象以及data.get('content').我对Ember很新,所以也许我不管怎么说这都是错的,但无论如何这对我来说似乎很奇怪.这是我的代码:
App.SupervisorsController = Ember.ArrayController.extend({
flat: function(){
return App.Supervisor.find().then(function(data){
var c = data.get('content') ;
console.log(c) ; // <-- logs an object containing four records,
// with attribute "length" showing 4
// Great! (see below for log output)
console.log(c[0]) ; // <-- logs first record. Great!
console.log(c[1]) ; // <-- undefined (?!)
console.log(c[2]) ; // <-- undefined (?!)
console.log(c[3]) ; // <-- undefined (?!) …Run Code Online (Sandbox Code Playgroud) 我一直在我的node.js模块中使用一个模式,这对我来说是显而易见的,我认为它一定有问题,或者我会看到更多的人这样做.为了保留模块全局的私有变量,我只需将它们作为属性附加到模块对象上.像这样:
module.exports = {
init: function() {
module.someClient = initializeSomethingHere()
},
someMethod: function(done) {
module.someClient.doSomething(done)
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎比我这样的东西更好......
var someClient;
module.exports = {
init: function() {
someClient = initializeSomethingHere()
},
someMethod: function(done) {
someClient.doSomething(done)
}
}
Run Code Online (Sandbox Code Playgroud)
...因为在第二个示例中,您需要var someClient在文件顶部进行搜索,以确保var在init方法中故意省略关键字.我从未见过这种模式在其他地方使用过,所以我想知道我是否遗漏了一些不太理想的东西.
思考?