我知道我在这里只是遗漏了一些简单但以下似乎不起作用。
App.Storage = Ember.Object.extend
push: (key, data)-> #I want to call this from the loop below in pushMany
#...
#...
pushMany: (key, data)->
data.forEach (d)->
#Tried:
@push(key, d) #<< TypeError: undefined is not a function
#Also tried:
@send('push', key, d) #<< TypeError: undefined is not a function
#Also tried:
App.Storage.push(key, d) #<< TypeError: undefined is not a function
我在路线中呼叫pushMany:
App.MessagesRoute = Ember.Route.extend
setupController: (controller, model)->
#storage is injected to route
#I can call storage.push here so I'm pretty sure my injection is working properly
storage = @get('storage')
storage.pushMany 'message', [{id: 3, value: 'Test Msg', author: 'Jules'}, {id: 4, value: 'Hello World!', author: 'Jules'}]
现在被困了几个小时。任何帮助将不胜感激。
答案 0 :(得分:1)
您的问题是对象范围。
这是一个例子:
var Test = Ember.Obejct.extend({
func: function(){
// the scope of "this" is the Test object
this.get('data');
var self = this;
this.get('data').forEach(function(){
// "this" is now the closure
// use "self" to access it
self.set('data', 'blup');
});
}
});
你的案子:
App.Storage = Ember.Object.extend
pushMany: (key, data)->
self = this
data.forEach (d)->
self.push(key, d)
答案 1 :(得分:0)
问题在于你的工作非常在Ember之外。而不是使用App.Storage
来存储您的值,只需在模型钩子中执行:
App.MessageRoute = Ember.Route.extend({
model:function() {
return [{id: 3, value: 'Test Msg', author: 'Jules'}, {id: 4, value: 'Hello World!', author: 'Jules'}]
},
actions: {
addMessage:function() {
this.get('model').pushObjects({id:5,value:'Heya',author:'Nick'});
}
}
});
答案 2 :(得分:0)
这个帖子不是最新的,但对于未来的旅行者参考:
我有同样的问题(我也使用CoffeeScript作为作者),并想出:
问题在于他正在使用data.forEach (d)->
:
这将是&#34;编译&#34;在下面,意味着this
是forEach()
方法的范围:
data.forEach(function(d) {
this.push(key, d);
this.send('push', key, d);
return App.Storage.push(key, d);
});
实际上,应该&#34;编译&#34;进入这样的事情:
this.data.forEach((function(_this) {
function(d) {
// your code here, using '_this' and 'd'
_this.push(key, d);
_this.send('push', key, d);
return App.Storage.push(key, d);
};
})(this));
有用的资源:
this
关键字;