在BackboneJS中,关于设置模型属性的说明

In BackboneJS, clarification on setting the attributes of models

本文关键字:设置 模型 属性 说明 BackboneJS 于设置      更新时间:2023-09-26

使用主干主干网时的两种常见场景:

属性列为默认值,然后设置

modelExample_A: Backbone.Model.extend({
  defaults: {
    whatever: 'foo'
    something: 'blah'
  }
});
viewExample_A: Backbone.View.extend({
  //our view definition
});
var Example_A = new viewExample_A({
  model: new modelExample_A()
})
Example_A.set({
  'whatever': 'bar',
  'something': 'weeeeeee',
});

属性未列为默认值,然后设置

modelExample_A: Backbone.Model.extend({
});
viewExample_A: Backbone.View.extend({
  //our view definition
});
var Example_A = new viewExample_A({
  model: new modelExample_A()
})
Example_A.set({
  'whatever': 'bar',
  'something': 'weeeeeee',
});

属性未列为默认值,在创建时设置

modelExample_A: Backbone.Model.extend({
});
viewExample_A: Backbone.View.extend({
  //our view definition
});
var Example_A = new viewExample_A({
  model: new modelExample_A({
    'whatever': 'bar',
    'something': 'weeeeeee',
  })
})

但是,如果我想设置模型的属性,该怎么办?我知道这通常是不鼓励的,但有时在我的代码中,我喜欢制作一个不属于当前模型的父模型。这几乎肯定永远不会改变,所以没有理由为了事件侦听/onChange的目的而放入属性。此外,这是一个没有默认值的东西(它只能在上下文中获得值),所以可以将其设置为模型的属性吗?或者这会导致问题吗?

设置属性而不是属性

modelExample_A: Backbone.Model.extend({
  defaults: {
    whatever: 'foo'
    something: 'blah'
  }
});
viewExample_A: Backbone.View.extend({
  //our view definition
});
var Example_A = new viewExample_A({
  model: new modelExample_A({
    'whatever': 'bar',
    'something': 'weeeeeee',
  })
})
Example_A.parentModel = parentModelExample;

适度使用并加以考虑,在模型实例上设置非属性属性很好。只是要小心,不要让这些数据很容易进入不一致的状态,如果你经常这样做,那就是代码的味道。在这种情况下,您可能需要考虑将某些状态建模为具有属性的实际模型,但不要持久化它们(永远不要调用.save)。