如何在jeditable函数中传递集合?

时间:2012-09-03 07:50:21

标签: backbone.js jeditable

我想使用 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更新集合。就地编辑工作正常,但问题是,我无法将集合传递给函数。我想在本地保存对我的集合的所有更改,并在以后将它们发送到服务器。我在这里做错了什么?

1 个答案:

答案 0 :(得分: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实际上是窗口的属性,所以如果你没有在代码中声明var self = this;,你将引用一个窗口obj。如果您不确定为什么self似乎存在但似乎不起作用,可能会加剧。

此类编码的常见用法倾向于使用that_this代替self。你被警告了。 ; - )