2013-06-12 4 views
1

Я довольно новичок в knockout.js, и мне нравится учиться, как создавать с ним интерфейсы. Но у меня есть немного стены, пытаясь сделать мой интерфейс более эффективным. То, что я пытаюсь достичь, удаляет только элементы, выбранные $ ('. Document_checkbox'). SerializeArray(),, который содержит ревизию_ид. Затем я снова добавлю записи в модель представления с измененным вызовом self.getDocument(), передав только измененные записи, которые будут добавлены повторно. Может ли кто-нибудь помочь мне удалить записи из массивов на основе значений «revision_id» $ ('. Document_checkbox'). SerializeArray() ?Замена определенных элементов в наблюдаемых массивах в knockout.js

function Document(data) { 
    this.line_id = data.line_id 
    this.revision_id = ko.observable(data.revision_id); 
    this.status_id = ko.observable(data.status_id); 
} 

function DocumentViewModel() { 
    var self = this; 
    self.documents = ko.observableArray([]); 

    self.getDocument = function(){ 
     //Reset arrays 
     self.documents.removeAll(); 
     //Dynamically build section arrays 
     $.getJSON("/Documentation/Get-Section", function(allData) { 
      $.map(allData, function(item) { 
       var section = { name: item.array_name, display_name: item.display_name, documents: ko.observableArray([])}; 
       self.documents.push(section); 
      }) 
      //Add document objects to the arrays 
      $.getJSON("/Documentation/Get-Document", function(allData){ 
       $.map(allData, function(item) { 
       var section = ko.utils.arrayFirst(self.documents(), function(documentSection) { 
        return documentSection.name === item.array_name; 
       }); 
       section.documents.push(new Document(item)); 
       }); 
      }); 
     }); 
    } 


    self.updateStatusBatch = function(data,event){ 
     $.post('/Documentation/Update-Status-Batch', 
     { 
      revision_id : $('.document_checkbox').serializeArray(), 
      status_id : event.currentTarget.value 
     }).done(
     function(){ 
       //This is where I get confused. 
     }); 
    } 


} 
+0

Вы хотите добавить свой html и привязки к этому вопросу? –

ответ

0

Вы должны изменить/Documentation/Update-Status-Batch, чтобы он возвращал идентификатор удаленного элемента. Таким образом, вы сможете удалить его на стороне клиента.

Попробуйте это "сделано" функцию:

function(removedItemId) { 
    self.documents.remove(function(doc){ 
     return doc.status_id == removedItemId; 
    }) 
} 

Посмотрите на функцию remove.

Надеюсь, это поможет.

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