2014-05-02 23 views
8

Kiedy po raz pierwszy użyłem Angular-Xeditable z moją aplikacją, natknąłem się na problem, próbując dowiedzieć się, jak zapisać zmianę edytowalną x do obiektu do którego dostęp uzyskano za pomocą pętli ng-repeat.

Dokumentacja koncentruje się głównie na używaniu onbeforesave i onaftersave do sprawdzania poprawności i chociaż pokazuje, że można go użyć do zapisywania danych, przykłady nie pokazują, jak przekazać coś więcej niż dane $ (lub indeks $) do twoja metoda onbeforesave/onaftersave. Próbki pokazują zapisywanie czegoś w stylu $ scope.person, co jest w porządku, jeśli masz jeden przedmiot.

Ale co, jeśli edytowano trzecią osobę z listy 30? Na pewno nie chcesz ich wszystkich ratować. Jak zapisać tylko obiekt, który został poddany edycji zamiast wszystkiego w tablicy?

Odpowiedz

14

Dokumenty Angular-Xeditable nie wyjaśniają jasno, ale wydaje się, że dane $ (i indeks $) są po prostu wartościami wstrzykniętymi i że możesz przekazać prawie wszystko, co chcesz, metodom składowania/sprawdzania poprawności. Więc to, co powinieneś robić, to przekazywanie samego obiektu (lub może tylko jego id).

Biorąc pod uwagę następujące znaczniki:

<div ng-repeat="p in people"> 
    <a href="#" editable-text="p.name" onaftersave="updatePerson(p)">{{p.name}}</a> 
</div> 

Byłbyś wtedy następujący kod w kontrolerze:

$scope.updatePerson = function(person) { 
    var ret = PersonService.save(person); // or whatever save mechanism you use 
    // You need to return a error string if save fails, true otherwise 
    if (ret !== null) { // You have to make sure this logic works for your save service 
     return ret; 
    } 
    return true; 
} 

z tym, można następnie obsługiwać zapisać dowolny sposób. Nie jesteś zobowiązany do używania tylko danych $ lub wartości indeksu, które dostarcza Angular-Xeditable. Można równie dobrze zrobić coś takiego:

<div ng-repeat="p in people"> 
    <a href="#" editable-text="p.name" onaftersave="updatePerson(p.id, p.name, p.dohickey)">{{p.name}}</a> 
</div> 

i aktualizować tylko nazwa i dohickey pola dla osoby z dostarczonego wartości znamionowej. Oczywiście musiałbyś zmienić metodę updatePerson(), aby zamiast tego oczekiwała ID jako pierwszego parametru i nazwy oraz dohickey jako drugiego i trzeciego paramera.

Należy również pamiętać, że jeśli użyjesz opcji onBeforeSave zamiast funkcji onAfterSave, tak jak to zrobiłem, p.nazwa nie będzie miała nowej wartości i będziesz musiał powrócić do używania danych $, aby uzyskać nową wartość.

+0

Próbowałem Twojego rozwiązania przez cały dzień, ale nie wiem, co jest nie tak w moim kodzie. Dokument X-Editable nie jest aż tak pomocny. Twoje wyjaśnienie dało mi pewien dobry postęp, ale nadal nie mogę wykonać ostatniego zapisu w mojej bazie danych, czy mógłbybyś spojrzeć [na moje pytanie tutaj] (http://stackoverflow.com/questions/30606614/angularjs-update-database -using-x-editable)? – celsomtrindade

+0

Jasne, przyjrzę się. –