我一直在追踪我发现的javascript sample code中的脊椎。看起来样本和脊柱的当前版本略有不同,因为我的代码几乎完全相同。上升是我的一个电话没有得到代理。
exports.UrlsList = Spine.Controller.create({
elements: {
".items": "items",
"form": "form",
"input": "input"
},
events: {
"submit form": "create"
},
proxied: ["render", "addAll", "addOne"],
init: function(){
Url.bind("create", this.addOne);
Url.bind("refresh", this.addAll);
},
addOne: function(url){
var view = Urls.init({item: url}); // The is another controller
this.items.append(view.render().el); //This is where the error occurs
},
addAll: function(){
Url.each(this.addOne);
},
create: function(e){
e.preventDefault();
var value = this.input.val();
if (value) {
Url.create({content: value});
}
this.input.val("");
this.input.focus();
}
});
当调用addOne函数时,它会在Url的上下文中调用,而不是在当前类的上下文中调用。它似乎不代理任何东西,即使addOne在代理列表中。有什么想法吗?
答案 0 :(得分:2)
Spine最近离开proxied
数组使用。
相反,您应该能够删除数组并使用proxy
函数:
init: function(){
Url.bind("create", this.proxy(this.addOne));
Url.bind("refresh", this.proxy(this.addAll));
},
addAll: function(){
Url.each(this.proxy(this.addOne));
},
答案 1 :(得分:0)
这就是我最近喜欢CoffeeScript的原因,因为你可以使用胖箭来获得相同的效果:
init: ->
Url.bind("create", @addOne)
addOne: (item) =>
# do your stuff with item in the context of the @ you would expect