1

我想使用jeditable编辑我的集合,其中modifyCollection是与事件 dblclick 关联的函数。我有以下代码:

initialize : function(options) {
        view.__super__.initialize.apply(this, arguments);
        this.collection = this.options.collection;
        this.render();
    },

render : function() {
        var template = _.template(tpl, {
            collectionForTemplate : this.collection ,
            });
            this.el.html(template);
            return this;
    },

modifyCollection : function (event){
        $('#name').editable(function(value, settings) {
            return (value);
        }
        , 
           { onblur: function(value) {
                this.modelID=event.target.nameID;
                    this.collection = this.options.collection;

                console.log("This Collection is: " + this.collection); //Shows : undefined
                            //  
                            this.reset(value);
                    $(this).html(value); 
                    return (value); 
            }
        });

想法是更新模型,随后通过 jeditable 更新集合。就地编辑工作正常,但问题是,我无法将集合传递给函数。我想在本地保存对我的集合的所有更改,并在以后将它们发送到服务器。我在这里做错了什么?

4

1 回答 1

1

将评论移至正式答案,以防其他人找到此线程。

this你的函数内部没有onblur()指向这个集合。尝试var self = this;在您的modifyCollection()函数中添加,然后在您的onblur()更改this.collection中添加self.collection如下:

modifyCollection : function (event) {

    var self = this;  // Added this line
    // When working with functions within functions, we need
    // to be careful of what this actually points to.

    $('#name').editable(function(value, settings) {
        return (value);
    }, {
    onblur: function(value) {
        // Since modelID and collection are part of the larger Backbone object,
        // we refer to it through the self var we initialized.
        self.modelID = event.target.nameID;
        self.collection = self.options.collection;

        // Self, declared outside of the function refers to the collection
        console.log("This Collection is: " + self.collection);
            self.reset(value);

            // NOTICE: here we use this instead of self...
            $(this).html(value); // this correctly refers to the jQuery element $('#name')
            return (value); 
        }
    });
});

更新 - 关于自我的预感

@muistooshort 很好地提到它self实际上是 window 的一个属性,所以如果你没有var self = this;在你的代码中声明,你将引用一个 window obj。如果您不确定为什么self似乎存在但似乎不起作用,可能会加重病情。

这种编码的普遍使用倾向于使用thator_this而不是self. 你被警告了。;-)

于 2012-09-04T03:17:04.967 回答