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, как на вашем наборе идентификатора, изменений: Идентификатор событие будет срабатывать и вызвать любую привязку к любой модели его коллекция

Надеется, что это помогает :)

Смежные вопросы