2016-07-20 5 views
0

Derzeit habe ich diesen Code für meine App, an der ich arbeite. Ich habe Probleme mit dem Rückgrat, ich hoffe du kannst mir helfen.Backbone.js. Speichern von JSON-Daten im lokalen Speicher

local-adapter.js

app.adapters.employee = (function() { 

console.log("Loading localstorage adapter module"); 

var findById = function (id) { 

     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      employee = null, 
      l = employees.length; 

     for (var i = 0; i < l; i++) { 
      if (employees[i].id === id) { 
       employee = employees[i]; 
       break; 
      } 
     } 

     deferred.resolve(employee); 
     return deferred.promise(); 
    }, 

    findByName = function (searchKey) { 
     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      results = employees.filter(function (element) { 
       var fullName = element.firstName + " " + element.lastName; 
       return fullName.toLowerCase().indexOf(searchKey.toLowerCase()) > -1; 
      }); 
     deferred.resolve(results); 
     return deferred.promise(); 
    }, 

    findByManager = function (managerId) { 
     var deferred = $.Deferred(), 
      employees = JSON.parse(window.localStorage.getItem("employees")), 
      results = employees.filter(function (element) { 
       return managerId === element.managerId; 
      }); 
     deferred.resolve(results); 
     return deferred.promise(); 
    }; 


// Store sample data in Local Storage 
window.localStorage.setItem("employees", JSON.stringify(
    [ 
     {"id": 1, "firstName": "James", "lastName": "King", "managerId": 0, "managerName": "", "reports": 4, "title": "President and CEO", "department": "Corporate", "cellPhone": "617-000-0001", "officePhone": "781-000-0001", "email": "[email protected]", "city": "Boston, MA", "pic": "james_king.jpg", "twitterId": "@fakejking", "blog": "http://coenraets.org"}, 
     {"id": 2, "firstName": "Julie", "lastName": "Taylor", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Marketing", "department": "Marketing", "cellPhone": "617-000-0002", "officePhone": "781-000-0002", "email": "[email protected]", "city": "Boston, MA", "pic": "julie_taylor.jpg", "twitterId": "@fakejtaylor", "blog": "http://coenraets.org"}, 
     {"id": 3, "firstName": "Eugene", "lastName": "Lee", "managerId": 1, "managerName": "James King", "reports": 0, "title": "CFO", "department": "Accounting", "cellPhone": "617-000-0003", "officePhone": "781-000-0003", "email": "[email protected]", "city": "Boston, MA", "pic": "eugene_lee.jpg", "twitterId": "@fakeelee", "blog": "http://coenraets.org"}, 
     {"id": 4, "firstName": "John", "lastName": "Williams", "managerId": 1, "managerName": "James King", "reports": 3, "title": "VP of Engineering", "department": "Engineering", "cellPhone": "617-000-0004", "officePhone": "781-000-0004", "email": "[email protected]", "city": "Boston, MA", "pic": "john_williams.jpg", "twitterId": "@fakejwilliams", "blog": "http://coenraets.org"}, 
     {"id": 5, "firstName": "Ray", "lastName": "Moore", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Sales", "department": "Sales", "cellPhone": "617-000-0005", "officePhone": "781-000-0005", "email": "[email protected]", "city": "Boston, MA", "pic": "ray_moore.jpg", "twitterId": "@fakermoore", "blog": "http://coenraets.org"}, 
     {"id": 6, "firstName": "Paul", "lastName": "Jones", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "QA Manager", "department": "Engineering", "cellPhone": "617-000-0006", "officePhone": "781-000-0006", "email": "[email protected]", "city": "Boston, MA", "pic": "paul_jones.jpg", "twitterId": "@fakepjones", "blog": "http://coenraets.org"}, 
     {"id": 7, "firstName": "Paula", "lastName": "Gates", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0007", "officePhone": "781-000-0007", "email": "[email protected]", "city": "Boston, MA", "pic": "paula_gates.jpg", "twitterId": "@fakepgates", "blog": "http://coenraets.org"}, 
     {"id": 8, "firstName": "Lisa", "lastName": "Wong", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0008", "officePhone": "781-000-0008", "email": "[email protected]", "city": "Boston, MA", "pic": "lisa_wong.jpg", "twitterId": "@fakelwong", "blog": "http://coenraets.org"}, 
     {"id": 9, "firstName": "Gary", "lastName": "Donovan", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0009", "officePhone": "781-000-0009", "email": "[email protected]", "city": "Boston, MA", "pic": "gary_donovan.jpg", "twitterId": "@fakegdonovan", "blog": "http://coenraets.org"}, 
     {"id": 10, "firstName": "Kathleen", "lastName": "Byrne", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0010", "officePhone": "781-000-0010", "email": "[email protected]", "city": "Boston, MA", "pic": "kathleen_byrne.jpg", "twitterId": "@fakekbyrne", "blog": "http://coenraets.org"}, 
     {"id": 11, "firstName": "Amy", "lastName": "Jones", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0011", "officePhone": "781-000-0011", "email": "[email protected]", "city": "Boston, MA", "pic": "amy_jones.jpg", "twitterId": "@fakeajones", "blog": "http://coenraets.org"}, 
     {"id": 12, "firstName": "Steven", "lastName": "Wells", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0012", "officePhone": "781-000-0012", "email": "[email protected]", "city": "Boston, MA", "pic": "steven_wells.jpg", "twitterId": "@fakeswells", "blog": "http://coenraets.org"} 
    ] 
)); 

    // The public API 
return { 
    findById: findById, 
    findByName: findByName, 
    findByManager: findByManager 
}; 

}());

EmployeeModel.js

app.models.Employee = Backbone.Model.extend({ 

}); 

app.models.EmployeeCollection = Backbone.Collection.extend({ 
    model: app.models.Employee, 
url: 'http://www.bonar.si/api/restaurants', 

initialize: function(){ 
    console.log("Employees initialize"); 
}, 

parse : function(response) { 
    console.log("response", response); 
    localStorage.setItem('json', JSON.stringify(response)); 
    console.log("local storage:", localStorage.getItem('json')); 
    return response; 

}});

Also, ich habe JSON-Daten in meinem lokalen Speicher und dann arbeite ich mit diesen Daten. Aber jetzt möchte ich JSON-Daten nur einmal pro Tag von der URL in den lokalen Speicher speichern und auf dem lokalen Speicher speichern.

Also Idee ist es, frische Daten einmal pro Tag und speichern Sie es in lokalen Speicher, und dann mit diesen Daten aus dem lokalen Speicher zu manipulieren, so brauche ich nicht JSON von URL für alles, was ich tue.

in EmployeeModel.js Ich erhalte Daten von der URL zur Sammlung und speichern Sie sie in den lokalen Speicher, aber jetzt bin ich verloren. Ich werde mit dem Rückgrat leicht verloren.

danke für die Hilfe.

+0

Und was ist das Problem? –

+0

jetzt habe ich json bereits im lokalen Speicher, Sie können es in localstorage-adapter.js sehen. Aber ich möchte es von der URL bekommen. Ich habe etwas in EmployeeModel.js gestartet, jetzt, wenn ich die App starte, bekomme ich die Daten von der URL. Aber das Problem ist, dass ich die Daten von URL nur einmal pro Tag erhalten und speichern lokalen Speicher. Und wenn ich Daten in der App verwende, möchte ich sie aus dem lokalen Speicher laden. – Chufta

+0

Auschecken https://github.com/jeromeg/Backbone.localStorage –

Antwort

0

Also, wenn ich richtig verstanden habe, müssen Sie die Mitarbeiterdaten einmal am Tag aktualisieren? Eine meiner Apps macht das. Mein Ansatz bestand darin, eine localStorage-Variable mit dem Aktualisierungszeitstempel beizubehalten. Die Refresh-Funktion wird jedes Mal aufgerufen, wenn Sie die App öffnen (aus der onDeviceReady-Funktion). Wenn der Aktualisierungszeitstempel in localStorage älter als ein Tag ist oder null ist, ruft er die Daten von der URL ab und legt das Aktualisierungsdatum auf jetzt fest.

Verwandte Themen