0

如何访问与模型对象相关的视图元素?

例如,我有一个Products. 每个产品都有color属性。我想“隐藏”(即删除视图表示)每个color等于"red".

到目前为止我知道的唯一方法是通过调用destroy()模型对象的(例如)方法(下面的代码)。但我不想破坏模型的对象。是否可以在不更改其模型的情况下删除视图的元素?

// App
hide_red_products: function() { 
  Product.each(function(x) {
    if (x.attributes.color == "red") { x.destroy() }
  })
}


// Products' view
initialize: function() {
  this.model.bind('destroy', this.remove_element, this);
}

remove_element: function() {
  return $(this.el).remove();
}
4

1 回答 1

2

模型不应该控制视图在做什么。

您应该使用该trigger方法来触发事件。假设颜色从某种颜色变为红色,您应该使用该change事件。如果您监听 change 事件,您甚至不需要该hide_red_products方法。

// App
hide_red_products: function() { 
  Product.each(function(x) {

    //if (x.attributes.color == "red") { x.trigger() }
    // you should never access a models attributes using the attributes key
    if (x.get('color') === 'red') { x.trigger('change'); } // shouldn't actually need this.
  })
}


// Products' view
initialize: function() {
  //this.model.bind('destroy', this.remove_element, this);
  this.model.bind('change', this.remove_element, this);
}

remove_element: function(model) {
  if (model.get('color') === 'red') {
     $(this.el).remove();
  }
}

就像我之前说的,如果视图侦听更改事件,则不必调用方法来删除元素。如果您觉得有必要,您可以自己使用change或自定义事件触发它x.trigger('changedToRed');

于 2012-04-13T23:34:09.800 回答