2011-12-15 71 views
1

我的问题是如何更新集合中的模型?这是我正在做的。在页面加载时,我获取联系人列表。在一个视图中,我将这些联系人列在无序列表中。每个联系人都是可点击的,这会将您带到编辑表单。一旦你改变了联系人,你就可以保存联系人。这将带你到一个方法,将修改后的模型保存回集合。你会如何做到这一点?在骨干文档中没有更新方法(或者至少我没有看到它)。我创建了一个这样做的方式,但我不确定它是否是首选的Backbone方式。那就是:更新集合中的模型

 updatePlan : function() 
     { 
      //unique ID of the model 
      var id = $('input[ name=id ]').val(); 
      //remove the old model from the collection 
      this.collection.remove(this.model); 
      //add the updated model to the collection 
      this.collection.add(this.model);    

     } 

你会觉得会有这样的功能:

 updatePlan : function() 
     { 
      this.collection.update(this.model); 

     } 

感谢您的帮助

回答

0

你可以有你的观点,即允许用户编辑联系人为你更新模型。并且,由于模型通过引用传递,它也将在它所属的集合中进行更新。

下面是一个例子。

EditView = Backbone.View.extend({ 
    events: { 
    'change #name': 'nameChanged', 
    'change #age': 'ageChanged' 
    }, 
    render: function() { 
    //render code 
    }, 
    nameChanged: function() { 
    var nameValue = this.$('#name').val(); 
    this.model.set({ Name : nameValue }); 
    }, 
    ageChanged: function() { 
    var ageValue = this.$('#age').val(); 
    this.model.set({ Age : ageValue }); 
    } 
} 

然后当你创建的编辑视图,您所选择的模型从收集

selectedContact = contactCollection.at(0); 
var editView = new EditView({ model: contact }); 
$('#editDiv').html(editView.render().el); 

唯一剩下要做的传递是将模型保存到服务器,当用户点击保存按钮。

$('#saveButton').click(function() { 
    selectedContact.save(); 
}); 
0

我同意保罗的观点,你应该有一个视图为你的收藏,一个视图为你的模型。 该模型的视图允许您编辑模型,保存应正确传播。

然而,说你似乎有一个视图有1个模型和1个集合(基于你的删除和添加this.model),所以你有一个视图,显示一个单一的模型...我假设:D

然后你可以这样做。

updatePlan : function() 
    { 
     //unique ID of the model 
     var id = $('input[ name=id ]').val(); 
     this.model.set({id: id}); 
     this.model.save(); 
    } 

我觉得那么问题可能只是您最初的“逻辑”,你不编辑集合中的典范。 您编辑一个模型,该模型恰好属于一个集合。 那么事件将触发两个模型和model.collection,就比如你设定的ID,更改:ID事件将触发并触发任何约束力要么你的模型其收藏

希望它能帮助:)