2012-05-10 7 views
1

私は見つけたjavascript sample codeの背骨をたどっています。私はほとんど同じコードを持っているので、サンプルと背骨の現在のバージョンは少し違うようです。アップアップは、私の呼び出しの1つがproxedになっていないです。スパインがイベントハンドラをプロキシしていません

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がプロキシリストにあるにもかかわらず、何もプロキシしていないようです。何か案は?

答えて

2

最近、脊椎はproxiedアレイの使用から遠ざかっています。

代わりに、あなたは、配列を削除し、proxy機能を使用することができるはずです:あなたは同じ効果を得るために脂肪の矢印を使用することができるので、私は、最近のCoffeeScriptを愛している理由

init: function(){ 
    Url.bind("create", this.proxy(this.addOne)); 
    Url.bind("refresh", this.proxy(this.addAll)); 
}, 

addAll: function(){ 
    Url.each(this.proxy(this.addOne)); 
}, 
0

これは、次のとおりです。

init: -> 
    Url.bind("create", @addOne) 

addOne: (item) => 
    # do your stuff with item in the context of the @ you would expect 
関連する問題