Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 设置选定单个视图的最佳方法(应取消选择其他视图)_Backbone.js_Event Handling_Marionette_Collectionview - Fatal编程技术网

Backbone.js 设置选定单个视图的最佳方法(应取消选择其他视图)

Backbone.js 设置选定单个视图的最佳方法(应取消选择其他视图),backbone.js,event-handling,marionette,collectionview,Backbone.js,Event Handling,Marionette,Collectionview,所以我想做的是: 我有一个收藏列表视图 项目 项目视图 现在我使用的方法是,当我单击item时,它处理itemview中的单击并添加所选的类,我使用$('.selected').removeClass('selected') 但我觉得这样做不对,我已经想了好几次,我如何才能做到最好。 也许我应该用事件 想法/实现?如果每个视图对应一个模型,那么我可能会选择该模型,并让视图对模型上的更改事件作出反应: var MyModel = Backbone.Model.extend({ select:

所以我想做的是:

我有一个收藏列表视图
  • 项目
  • 项目视图

    现在我使用的方法是,当我单击item时,它处理itemview中的单击并添加所选的类,我使用
    $('.selected').removeClass('selected')

    但我觉得这样做不对,我已经想了好几次,我如何才能做到最好。 也许我应该用事件


    想法/实现?

    如果每个视图对应一个模型,那么我可能会选择该模型,并让视图对模型上的更改事件作出反应:

    var MyModel = Backbone.Model.extend({
      select: function () {
          // I add select methods instead of having this 
          // set directly on the model in case I want to 
          // control the event firing, for example if I 
          // want to suppress it
          this.set({ selected: true });
      },
      deselect: function () {
          this.set({ selected: false });
      }
    });
    
    // where-ever my view is defined:
    var MyView = Marionette.ItemView.extend({
        initialize: function () {
            this.listenTo(this.model, 'change:select', this.toggleSelected);
        },
        toggleSelected: function () {
            this.$el.toggleClass('selected');
        }
    });
    
    这将保持模型状态的解耦,并将视图行为的范围也限定为视图的关注点。如果您担心保持类的选定状态与模型的选定状态同步,您也可以自己从模型选择/取消选择方法触发更改,将选定状态作为触发器方法中的附加选项传递:

    select: function () {
        this.trigger('selected', { selected: true });
    }
    
    toggleSelected: function (options) {
        this.$el.toggleClass('selected', options.selected);
    }
    
    或者,您可以在调用toggleClass时实际查询模型的状态:

    toggleSelected: function () {
        this.$el.toggleClass('selected', this.model.get('selected'));
    }