【问题标题】:Updating a variable attribute with backbone's set method使用主干的 set 方法更新变量属性
【发布时间】:2025-12-06 18:50:02
【问题描述】:

在视图触发事件后,我需要更新模型的一个属性。我不知道必须事先更新哪个属性。如何使用主干的 set 方法设置变量属性?

这是我的模型的一组示例属性:

defaults: { 
            content: 'Stupid filthy Hobbit',
            date: '03-19-14',
            position: [ 
                        {top: 134, left: 22},
                        {top: 78,  left: 24},
                        {top: 91,  left: 18}  
                      ]
          } 

这是我在视图中使用的方法:

events: {
    'change input': 'onChangePosition'
},

onChangePosition: function(e){

    var key = $(e.currentTarget).data('key');
    var attribute = $(e.currentTarget).data('attribute');
    var value = $(e.currentTarget).val();

    this.model.set(['position'][key][attribute], value);
}

【问题讨论】:

  • 您是否已经在视图中定义了对模型的引用?最好在实例化视图时?
  • 是的,除了this.model.set(['position'][key][attribute], value);之外,一切都运行良好

标签: javascript backbone.js nested-attributes backbone-model


【解决方案1】:

我假设key 是您要在position 数组中更新的对象的整数索引?如果是这样,您将需要获取位置数组,更新它然后再次设置它。试试这个:

var position = this.model.get('position');
position[key][attribute] = value;
this.model.set('position', position);

澄清一下,原因是Backbone.Model.set() 只接受两种形式。要设置的属性的哈希值,或者要设置的特定属性的名称及其值。但是没有语法允许您指定数组的索引项,因此您必须获取整个内容,更新它然后设置它。

【讨论】: