在Backbone.js中绑定它

时间:2011-04-23 21:14:27

标签: javascript backbone.js

我有一个像这样的简单演示应用程序

Friend = Backbone.Model.extend 
    name:null
Friends = Backbone.Collection.extend
    initialize: (models,options)->
        this.bind("add",options.view.addFriendLi)
AppView = Backbone.View.extend
    el: $("body")
    initialize: ->
        this.friends = new Friends(null,view:this)
        _.bindAll(@,"addFriendLi")
    events: 
        "click #add-friend": "showPrompt"
    showPrompt: ->
            friend_name = prompt("who is your friend?")
            friend_model = new Friend(name:friend_name)
            this.friends.add(friend_model)
    addFriendLi : (model) ->
        console.debug this.friends  #returns undefined
        if model.get("name")?
            item = $("<li>"+model.get("name")+"</li>")
            item.appendTo("#friends-list")
appview = new AppView

除了内部addFriendLi this.friends返回undefined之外,这大部分都是正常的。这意味着它不绑定到当前模型实例。但我按照说明调用了_.bindAll(this,"addFriendLi")。我不明白为什么这不起作用。

2 个答案:

答案 0 :(得分:2)

我通过将bindAll移动到集合构造函数上面来解决这个问题,就像这个

一样
    _.bindAll(@,"addFriendLi")
    this.friends = new Friends(null,view:this)

答案 1 :(得分:0)

从我可以看到以下内容应该做的诀窍

_。bindAll( “addFriendLi”)