1

我有一个使用 Backbone 渲染的多选下拉菜单。当用户选择或取消选择选项时,我希望这些(取消)选择通过 Backbone 异步保存。

我找到了Backbone.Picky,并认为它可能对我的努力有所帮助,但我似乎无法让它检测选择。

在下面我FieldViewclicked函数中,console.log(this.model.selected);总是将undefined写入日志。为什么?

    var Field = Backbone.Model.extend({
        initialize: function(){
           var selectable = new Backbone.Picky.Selectable(this);
           _.extend(this, selectable);
        }
    });

    var FieldView = Backbone.View.extend({
        tagName: "option",

        initialize: function(){
            _.bindAll(this, 'render');
        },
        events: {
            "click":"clicked"
        },
        clicked: function(e) {
            var data_type = this.model.get("DATA_TYPE");
            console.log(this.model.selected);    // why is this undefined?
            console.log("it's a " + data_type);
        },
        render: function(){
            this.$el.attr('value', this.model.get('COLUMN_NAME')).html(this.model.get('display_name'));
            return this;
        }
    });

这是一个 jsfiddle http://jsfiddle.net/EAZCt/2/以获得更多上下文。

使用 Backbone,如何将选项的选择状态异步保存在多选列表中?

4

1 回答 1

2

您的模型对象从来没有“选择”属性,因为您从不选择模型。我从未使用过 Backbone.Picky,但您似乎可以尝试:

var FieldView = Backbone.View.extend({
    tagName: "option",

    initialize: function(){
        this.model.on('selected', this.selected, this);
    },
    events: {
        "click":"clicked"
    },

    clicked: function() {
        this.model.select();
    },
    selected: function() {
        var data_type = this.model.get("DATA_TYPE");
        console.log(this.model.selected);
        console.log("it's a " + data_type);
    },
    render: function(){
        this.$el.attr('value', this.model.get('COLUMN_NAME')).html(this.model.get('display_name'));
        return this;
    }
});

http://jsfiddle.net/hGEYL/

于 2012-11-28T18:11:45.123 回答